java项目中classpath的理解

 更新时间:2021年12月31日 10:49:56   作者:柒叶  
这篇文章介绍了java项目中classpath的理解,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在java项目中,你一定碰到过classpath,通常情况下,我们是用它来指定配置/资源文件的路径。在刚开始学习的时候,自己也糊里糊涂,但是现在,是时候弄清楚它到底是指什么了。

顾名思义,classpath就是class的path,也就是类文件(*.class的路径)。一谈到文件的路径,我们就很有必要了解一个java项目(通常也是web项目)它在真正运行时候,这个项目内部的目录、文件的结构;这样,我们才好分析、理解classpath。

开发时期的web项目结构

下面,我以一个ssm的项目为例,我先把开发时候的项目的目录结构图放出来。根据maven的约定,一般我们的项目结构就像下面这样。

classpath用在哪里了?

而我们经常用到classpath的地方,就是在指定一些配置/资源文件的时候会使用到。比如说,我们在web.xml中指定springmvc的配置文件,如下图,我们使用:classpath:entry/dev/spring-mvc.xml;再比如,当我们把*Mapper.xml文件放在了main/java/../mapping/文件夹下时,在mybatis的配置文件中配置其位置,我们使用:

classpath*:**/mapper/mapping/*Mapper.xml

很显然,上面这2个classpath的配置,是为了告诉配置文件,去哪里寻找我们要指定的配置文件。要想弄清楚为什么是上面这样写的,我们就要来看看项目运行时(或者是发布后)的目录结构了。

web项目发布后的目录结构

我们使用IDEA对项目进行打包,一种是war包,一种是explorer的文件夹,war包解压后就是explorer了。我们来对解压后的目录结构进行分析。

经过对比,我们要注意到,开发时期的项目里,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/下任意层的目录,只要符合后面的文件路径,都会被作为资源文件找到。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring中Bean创建完后打印语句的两种方法

    Spring中Bean创建完后打印语句的两种方法

    这篇文章主要介绍了Spring中Bean创建完后打印语句的两种方法,一个是实现InitializingBean接口,另一个使用@Bean注解和initMethod属性,通过代码示例介绍的非常详细,感兴趣的小伙伴可以参考阅读
    2023-07-07
  • springmvc接收参数为日期类型详解

    springmvc接收参数为日期类型详解

    这篇文章主要介绍了springmvc接收参数为日期类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • MQ的分类组成优缺点测试点入门教程

    MQ的分类组成优缺点测试点入门教程

    这篇文章主要为大家介绍了MQ的分类组成优缺点测试点入门教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java编程实现递增排序链表的合并

    Java编程实现递增排序链表的合并

    这篇文章主要介绍了Java编程实现递增排序链表的合并,两种方法,代码分享给大家,供需要的朋友参考。
    2017-10-10
  • SpringBoot整合canal实现数据同步的示例代码

    SpringBoot整合canal实现数据同步的示例代码

    本文主要介绍了SpringBoot整合canal实现数据同步,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • java中对象和Map互相转换的几种常见方式举例

    java中对象和Map互相转换的几种常见方式举例

    Map在日常开发应用中的频率很高,最常用的实现类是HashMap和有序的TreeMap,下面这篇文章主要给大家介绍了关于java中对象和Map互相转换的几种常见方式举例,需要的朋友可以参考下
    2024-01-01
  • java代码mqtt接收发送消息方式

    java代码mqtt接收发送消息方式

    这篇文章主要介绍了java代码mqtt接收发送消息方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 最安全的加密算法Bcrypt防止数据泄露详解

    最安全的加密算法Bcrypt防止数据泄露详解

    这篇文章主要为大家介绍了最安全的加密算法Bcrypt防止数据泄露详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java 实现LZ78压缩算法的示例代码

    Java 实现LZ78压缩算法的示例代码

    这篇文章主要介绍了Java 实现LZ78压缩算法的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • java编程进阶小白也能手写HashMap代码

    java编程进阶小白也能手写HashMap代码

    这篇文章是一篇java小白进阶篇本文教大家手写一个HashMap实现的示例代码,有需要的朋友可以借鉴参考下,希望对大家能够有所进益,祝大家早日升职加薪
    2021-10-10

最新评论