在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/下任意层的目录,只要符合后面的文件路径,都会被作为资源文件找到。

java项目中的classpath相关推荐

  1. java项目中的classpath到底是什么

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

  2. Ant在Java项目中的使用(一眼就看会)

    参考:http://www.cnblogs.com/zhengqiang/p/5557155.html Ant是跨平台的构建工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将A ...

  3. 在Java项目中整合Scala

    Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...

  4. JAVA项目中的事务管理

    **JAVA项目中的事务管理 事务:保证一组对数据库操作动作的完整性(一致性, 安全性),也就是说:这一组动作要么都成功,要么都失败 1.JDBC对事务的支持 Java应用传统上使用JDBC(Java ...

  5. 缓存详解-在java项目中使用缓存

    目录 一.概述 二.java常用的缓存 三.使用缓存将会面临的一些问题 穿透 雪崩 击穿 总结 三.缓存淘汰策略 缓存淘汰 在Spring项目中优雅的实现缓存 二级缓存推荐的实现 一.概述 在java ...

  6. java项目中rides的使用

    项目开发中一些特定的数据我们不一定要关系型数据库来存储,使用非关系型数据库反而更方便读取数据,效率高,这里介绍一下在java中rides的使用 1. 导入rides所需要的相关依赖jar包(在pom文 ...

  7. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  8. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序

    在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...

  9. java项目怎么定义异常_在Java项目中如何实现自定义异常

    在Java项目中如何实现自定义异常 发布时间:2020-11-11 15:41:32 来源:亿速云 阅读:77 作者:Leah 这篇文章将为大家详细讲解有关在Java项目中如何实现自定义异常,文章内容 ...

最新文章

  1. python pandas inplace用法
  2. SET NOCOUNT的用法和注意事项
  3. subprocess installed post-installation script returned error exit status 127
  4. Unity经典游戏教程之:是男人就下100层
  5. list、tuple
  6. 双级减速器优化matlab,基于matlab的二级齿轮减速器的优化设计.doc
  7. 2D阵列中的峰值检测
  8. 【转载】总结C#获取当前路径的7种方法
  9. The /usr/local/mysql/data directory is not owned by the 'mysql' to '_mysql' user
  10. 一个H264流,保存成多个文件需要注意的两个问题
  11. Mysql实战练习之简单图书管理系统
  12. 怎样自学python_怎样自学Python?
  13. [UE4]Expandable Area可展开的区域
  14. 学计算机高中应选什么科目,新高考选哪些科目可以报计算机?高中生如何进步?...
  15. 数模2019暑期培训Day1
  16. Kotlin中三元运算符
  17. 【Android】基于Airtest实现大麦网app自动抢票程序
  18. 苹果手机如何只用数据线修改定位
  19. noip模拟赛 街灯
  20. 71 ----二次曲面方程:椭球面、双曲面、抛物面、二次曲面的种类

热门文章

  1. 8位移位寄存器和优先编码器
  2. Oracle数据库事务回滚和提交,数据库 事务提交和回滚
  3. php pdo输出数据库,PHP中PDO对像及PDOStatement::fetch()的用法数据库查询,结果输出处理...
  4. 有类似split的命令吗_5分钟学linux命令之split
  5. c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)
  6. python中的深拷贝与浅拷贝
  7. c++MMMMM:oo
  8. Java生鲜电商平台-缓存架构实战
  9. IdentityServer4【QuickStart】之使用asp.net core Identity
  10. Delphi及C++Builder经典图书一览表(持续更新中2018.01.02)