不良路径警告,它来自哪里?

2022-09-01 11:32:57

当我使用编译器警告(JDK 1.5)编译我的项目时,我收到一堆错误的路径元素警告:

警告:: [path] 错误的路径元素 “C:\Users\User\MyJava\common\lib\junit.jar”: 没有这样的文件或目录 警告:: [path] 错误的路径元素 “C:\Users\User\MyJava\common\lib\jdom.jar”: 没有这样的文件或目录 警告:: [path] 错误的路径元素 “C:\Users\User\MyJava\common\lib\xerces.jar”: 没有这样的文件或目录 警告:: [path] 错误的路径元素 “C:\Users\User\MyJava\common\lib\xml-apis.jar”: 没有这样的文件或目录

以及更多。

这是使用 IDEA 8.1.3。我在IDEA的配置中找不到任何地方(我破坏了整个项目),其中任何内容都指向这些文件。它们确实都不再以这个名字存在了,但是它们指的是什么呢?


答案 1

我认为@Yishai有权这样做(我会给他一个赞成票,让他滚球)。我总是遇到这种情况。在我认为Java语言的一个可怕的决定中,他们决定允许类路径设置进入jar文件中的MANIFEST文件是可以的。因此,从本质上讲,Jars内部可以包含指向位于其他地方的其他类和jar的文件,当它们指向的其他内容不存在时,您会看到像您收到的警告一样的警告。这些警告来自编译类路径上的 Jar 文件。因此,如果您真正关心的是跟踪有问题的jar文件,提取jar文件的内容,删除其清单文件中的“类路径”设置并重新创建它们。像这样的东西(首先将jar移动到某个地方的临时目录):

#Extract the jar file
jar xvf myfile.jar
rm myfile.jar
emacs ./META-INF/MANIFEST.MF

*Find the entry "Class-path:" and remove it completely and save the changes

#Rebuild the jar file
jar cvf myfile.jar ./*

这应该可以解决问题!

我不认为你只是想禁止显示这些消息,因为如果你想完全控制你的类路径上发生了什么,你应该搜索这些清单文件,并确保它们不会以你不知道的方式弄乱类路径。

您可能必须查看大量jar文件,因此我通常最终使用shell循环来帮助我查看它们。您可以将所有有问题的Jar复制到临时目录,并运行如下循环(bash语法):

for i in *.jar; do echo $i; jar xf $i; grep -i 'class-path' ./META-INF/MANIFEST.MF; done

这将打印当前目录中每个 Jar 文件的名称,提取其内容,并 grep 其清单文件中的类路径条目。如果输出中 jar 文件的名称后面有一个“类路径”打印输出,则表示 Jar 在其清单中具有类路径设置。通过这种方式,您可以有希望弄清楚需要对哪些Jars采取行动。


答案 2

据此,问题在于在第三方jar中,清单中引用了这些。可以通过将 -Xlint:-path 添加到编译参数来禁用该消息。


推荐