java project/web classpath

╰+哭是因爲堅強的太久メ 2023-10-04 11:13 24阅读 0赞

一、Eclipse下的java project目录问题和Classpath路径

参考文献:百度经验 Eclipse下的java工程目录问题和Classpath路径 https://jingyan.baidu.com/article/cd4c29790dd529756e6e602a.html

  1. Eclipse下的java工程都有哪些文件夹?答:new java project时,会默认创建SRC源代码目录,并默认创建一个bin目录作为输出目录,输出目录是指生成的class文件和配置文件地址。所以Eclipse创建的java工程,默认就两个文件夹,src和bin。
  2. 当点击Eclipse运行时候java jdk会默认执行编译,并将编译后的java文件,生成class文件放到项目目录下的bin文件夹里,以.class命名结尾。注:即使某个类有bug错误,不能编译通过。但只要点击了编译运行,就会在bin文件夹下生成这个类的class文件。
  3. 最重要的目录是bin目录,而非src目录。bin目录是整个项目的输出目录,输出目录,意味着不论是编译后的class文件还是项目用到的propertier文件,最终都会输出到bin目录下。项目最后的结果是jar文件,jar文件里面也只有class文件夹,并不会有src文件夹,而是将src下的所有包名转换为文件夹保存在bin目录下,而其他Test根目录下的比如自己创建的config文件夹并不会在jar包的bin目录下存在,但是会将所有的非src文件夹下的其他文件夹所有东西都保存到bin目录下。
  4. java编译器(jdk)能进行编译项目和组织项目的一切前提是:classpath。java.exe虚拟机有个cp参数,eclipse生成的java工程,也会有一个classpath参数,最终eclipse会将自己的classpath参数传给java.exe的参数cp,用于java虚拟机运行操控。比如,你在项目Test下创建的文件夹config,是不会被读取到的,因为eclipse默认的classpath只包括src目录,bin目录jdk目录,和依赖的jar包目录。这也就是为什么我们引进jar包时,一定要add to build path,包括创建文件夹时,也要add to source。这一切都是为了添加进claspath路径里面。
  5. jvm最红会根据classpath下的路径,将全部输出,输出到bin目录下。包括引进的jar包等等。
  6. 所以classpath,是虚拟机编译项目的基础,是虚拟机编译组织项目的基础。
  7. classpath是虚拟机编译组织项目的基础。而项目根目录是创建文件,引进路径的基础。
  8. buildpath就是classpath,buildpath就是classpath。是jvm编译组织生成项目的根本。只有添加进buildpath(classpath),才能被jvm读取到,也就是才能被代码读取到。
  9. 每个项目都有一个默认的根路径。Eclipse下默认根目录是Test下,直接就是工程目录下。而生成的Jar包,默认根目录是bin下。
  10. 看一下工程文件夹下的.classpath文件:4部分,src问价,bin文件,jdk路径,jar包路径
  11. 项目代码里面,又是怎样获取项目或者文件或者类的绝对路径的呢?答:因为有了classpath的存在,所以我们在读取配置文件或者涉及文件路径操作的时候,在代码里只需要写相对 相对路径就可以,相对路径就是参照classpath的路径,也就是参照最终的bin文件夹路径。如果想获取绝对路径,可以通过类的加载器,随时获取所在类的绝对路径,class.getclassload().getResource(“”);即可
  12. 顺便说一下Eclipse是怎么调用本地jdk的及本地jdk的虚拟机的,是依靠你本地配置的JAVA_HOME环境变量,Eclipse会自动读取这个环境变量地址。进而编译运行项目的。进而也就是把Eclipse自己的classpath传递给jvm的cp参数的

二 Eclipse下的java web project目录问题和Classpath路径

参考文献:csdn java classpath 理解 https://blog.csdn.net/Maxiao1204/article/details/107657084

classpath就是类包的最顶层,对照下面这个图,应该理解的很清楚了:

20200729102729843.png

在编译完项目后,会在target下生成classes,这个下面的路径就叫做类路径,对比上面的source 可以清楚的知道类路径具体指什么

classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

-———————————————————————这篇写的不错————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

参考文献:segmentfault java项目中的classpath到底是什么 https://segmentfault.com/a/1190000015802324?utm_source=tag-newest

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

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

开发时期的web项目结构

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

clipboard.png

classpath用在哪里了?

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

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

20210421173132677.png

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Fpd29rYWNoZQ_size_16_color_FFFFFF_t_70

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

web项目发布后的目录结构

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

clipboard.png

经过对比,我们要注意到,开发时期的项目里,src/main/下面的javaresources文件夹都被(编译)打包到了生产包的WEB-INF/classes/目录下;而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。同时由maven引入的依赖都被放入到了WEB-INF/lib/下面。最后,编译后的class文件和资源文件都放在了classes目录下。

clipboard.png

classpath原来是这个

在编译打包后的项目中,根目录是META-INFWEB-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/下任意层的目录,只要符合后面的文件路径,都会被作为资源文件找到。

三、参考文献:

csdn java classpath 理解 https://blog.csdn.net/Maxiao1204/article/details/107657084

csdn java项目中Classpath路径到底指的是哪里? https://blog.csdn.net/weixin_41708212/article/details/79785964

csdn classpath指定的路径简单解释 https://blog.csdn.net/qq_37706228/article/details/81416795

csdn Spring下面的classpath 和 classpath* 区别的简单讲解 https://blog.csdn.net/gdfgdfk/article/details/50329733

技术之家 你理解java中classpath到底是什么,怎么理解 http://www.jszja.com/contents/14/705.html

博客园 classpath路径 classpath路径https://www.cnblogs.com/shitianzeng/articles/2582561.html

java项目中的classpath到底是什么 https://segmentfault.com/a/1190000015802324?utm_source=tag-newest

发表评论

表情:
评论列表 (有 0 条评论,24人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java中的classpath

    Java中的classpath classpath,顾名思义即java源代码编译后的字节码文件\.class的寻址路径。你需要将字节码文件放到公用目录下,否则java程序

    相关 classpath

    <!-- classpath 为程序指明了执行路径如编译,默认会到系统中找,找不到,则执行classpath指定的。遇到第一个,只执行第一个 --> <?xml versi