如何Java理解项目中的ClassPath
在项目中,你一定碰到过classpath,通常情况下,我们是用它来指定资源文件的路径。classpath就是class的path,也就是类文件(*.class的路径)。
一 开发时期的项目结构(SSM)
二 classpath用在何处
经常用到classpath的地方,就是在指定一些资源文件的时候。比如,web.xml中指定springmvc的配置文件**:classpath:entry/dev/spring-mvc.xml**;比如,当我们把*Mapper.xml文件放在了main/java/…/mapping/文件夹下时,在mybatis的配置文件中配置其位置:
classpath*:**/mapper/mapping/*Mapper.xml
classpath的配置,是为了告诉配置文件,去哪里寻找指定的配置文件。要想弄清楚为什么是上面这样写的,我们就要来看看项目运行时(或者是发布后)的目录结构
三 项目发布后的目录结构
经过对比,我们要注意到,开发时期的项目里,src/main/下面的java和resources文件夹都被(编译)打包到了生产包的WEB-INF/classes/目录下;而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。同时由maven引入的依赖都被放入到了WEB-INF/lib/下面。最后,编译后的class文件和资源文件都放在了classes目录下。
四 ClassPath总结
在编译打包后的项目中,根目录是META-INF和WEB-INF 。这个时候,我们可以看到classes这个文件夹,它就是我们要找的classpath。
在第1个例子里,classpath:entry/dev/spring-mvc.xml 中,classpath就是指WEB-INF/classes/这个目录的路径。需要声明的一点是,使用classpath:这种前缀,就只能代表一个文件。
在第2个例子里,classpath*:**/mapper/mapping/*Mapper.xml,使用classpath*:这种前缀,则可以代表多个匹配的文件;**/mapper/mapping/*Mapper.xml,双星号**表示在任意目录下,也就是说在WEB-INF/classes/下任意层的目录,只要符合后面的文件路径,都会被作为资源文件找到。