java项⽬中的classpath到底是什么
java项⽬中的classpath到底是什么
在java项⽬中,你⼀定碰到过classpath,通常情况下,我们是⽤它来指定配置/资源⽂件的路径。在刚开始学习的时候,⾃⼰也糊⾥糊涂,但是现在,是时候弄清楚它到底是指什么了。
顾名思义,classpath就是class的path,也就是类⽂件(*.class的路径)。⼀谈到⽂件的路径,我们就很有必要了解⼀个java项⽬(通常也是web项⽬)它在真正运⾏时候,这个项⽬内部的⽬录、⽂件的结构;这样,我们才好分析、理解classpath。
开发时期的web项⽬结构
下⾯,我以⼀个ssm的项⽬为例,我先把开发时候的项⽬的⽬录结构图放出来。根据maven的约定,⼀般我们的项⽬结构就像下⾯这样。
classpath⽤在哪⾥了?
⽽我们经常⽤到classpath的地⽅,就是在指定⼀些配置/资源⽂件的时候会使⽤到。⽐如说,我们在l中指定springmvc的配置⽂件,如下图,我们使⽤:classpath:entry/l;再⽐如,
当我们把*l⽂件放在了main/java/../mapping/⽂件夹下时,在mybatis的配置⽂件中配置其位置,我们使⽤:
classpath*:**/mapper/mapping/*l
汽车spring是什么意思很显然,上⾯这2个classpath的配置,是为了告诉配置⽂件,去哪⾥寻我们要指定的配置⽂件。要想弄清楚为什么是上⾯这样写的,我们就要来看看项⽬运⾏时(或者是发布后)的⽬录结构了。
web项⽬发布后的⽬录结构
我们使⽤IDEA对项⽬进⾏打包,⼀种是war包,⼀种是explorer的⽂件夹,war包解压后就是explorer了。我们来对解压后的⽬录结构进⾏分析。
经过对⽐,我们要注意到,开发时期的项⽬⾥,src/main/下⾯的java和resources⽂件夹都被(编译)打包到了⽣产包的WEB-INF/classes/⽬录下;⽽原来WEB-INF下⾯的views和l则仍然还是在WEB-INF下⾯。同时由maven引⼊的依赖都被放⼊到了WEB-INF/lib/下⾯。最后,编译后的class⽂件和资源⽂件都放在了classes⽬录下。
classpath原来是这个
在编译打包后的项⽬中,根⽬录是META-INF和WEB-INF。这个时候,我们可以看到classes这个⽂件夹,它就是我们要的classpath。
在第1个例⼦⾥,classpath:entry/l中,classpath就是指WEB-INF/classes/这个⽬录的路径。需要声明的⼀点是,使⽤classpath:这种前缀,就只能代表⼀个⽂件。
在第2个例⼦⾥,classpath*:**/mapper/mapping/*l,使⽤classpath*:这种前缀,则可以代表多个匹配的⽂件;**/mapper/mapping/*l,双星号**表⽰在任意⽬录下,也就是说在WEB-INF/classes/下任意层的⽬录,只要符合后⾯的⽂件路径,都会被作为资源⽂件到。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论