全栈君遇到的classpath疑惑:指向哪里及相关测试

大家好,又见面了,我是你们的朋友全栈君。

全栈君遇到的classpath疑惑:指向哪里及相关测试

今天在项目中看到许多地方都运用了 classpath 。我自己对于 classpath 究竟指向何处还不是很明白,因此就在网络上通过百度进行了查询。

上面图片的意思简单来讲,classpath 仅能表示 lib 目录以及 WEB-inf/classes 路径下的文件,而 src 路径下的文件是 classpath 不能表示的。

从项目结构方面来看,配置文件通常不会放在 WEB-INF 下面。而且也没有发现 classes 路径。通常 lib 目录是用来放置依赖的 jar 包的呀。在这种情况下,感觉有些不妙了。接着又进行了测试,在 WEB-INF 路径下创建了 lib 和 classes 文件夹。

测试结果较为明显,无法访问 WEB-INF 下面的 classes 路径中的文件,也无法访问 WEB-INF 下面的 lib 路径中的文件,并且出现了报错。

我有一个想法,觉得不对。因为在项目中明明可以用 classpath 引入配置文件,可到底是怎么引入的呢?从第一张图和第二张图来看,是通过 classpath 访问到了 src 路径下面的 main/resources 文件中的配置文件。当打开编译后的项目时,发现项目文件中有一个名为.classpath 的文件,于是点开查看了一下。

具体classpath文件的介绍可以参考下面博客

.classpath 文件的作用是记录项目编译环境的各类信息。这些信息包含源文件的路径、编译后 class 文件的存放路径、依赖的 jar 包路径、运行的容器信息以及依赖的外部 project 等。倘若将此文件删除,那么 eclipse 就无法将该工程识别为一个正常的 java 工程,而仅仅会将其当作普通的文件夹,进而导致无法正常运行。

源文件的具体位置(kind 为“src”),运行的系统环境(kind 为“con”),工程的 library 的具体位置信息(kind 为“lib”)。在每个 lib 的 xml 子节点中,有关于它的其它配置信息,例如我配置的那个“javadoc_location”。还有项目的输出目录(kind 为“output”)。

总体上说这个文件就是配置整个工程的运行环境。

这很清楚,classpath 指的是(kind=”src”)所指定的文件。并且可以看到,此时(kind=”src”)的设置并未包含 WEB-INF 文件。此刻我们要验证 WEB-INF 文件被 classpath 访问是否与这个设置有关。

我们先把 applicationContext.xml 文件放置在 WEB-INF 路径之下,接着.classpath 文件的内容呈现为下图所示的样子,然后启动本项目。

打开项目的原始文件后,发现其中并没有出现 applicationContext.xml。

此时我们要在.classpath 文件里添加一个 classpathentry。这个 classpathentry 的 kind 是“src”,其 path 是“WebContent/WEB-INF”。

再次启动本项目

在项目的原始路径被打开后,发现 applicationcontext.xml 出现在了 WebContent/WEB-INF 之中。

由此可以总结:

在编译时生成的文件.classpath 中,存在类型为 classpath 路径且 kind=”src” 的部分。在项目中,能够以 classpath:xxx 的方式进行引用。同时,也可以手动添加或扩大 classpath 的范围。

你想知道 classpath 能够引用哪些地方的文件,打开.classpath 后,查看 kind=”src”的部分就能知晓了。

在编译生成的项目的 bulid/classes/ 下的文件,都是 classpath 路径下的文件,都能够通过 classpath 方法获取。(其中 classes 指的是编译后的文件)

“src 并非 classpath,真正的 classpath 是在编译后文件的存放路径,默认是 build/classes/,而不是 WEB-INF/classes 和 lib 等,这是编写项目时所看到的情况,如结论 2 所述,‘src 不是 classpath,WEB-INF/classes,lib 才是 classpath’这句话也是不对的”

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

26阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读