坏路径警告,它来自哪里?

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

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

还有很多。

这是使用IDEA 8.1.3。 我无法在IDEA的配置中找到任何地方(我对整个项目进行了深入研究),其中任何内容都指向这些文件。 他们在这个名字下确实不存在了,但是什么引用了它们?

我认为@Yishai有权利(我会给他一个上升投票让球滚动)。 我一直遇到这种情况。 在我认为对Java语言的可怕决定中,他们认为允许类路径设置进入jar文件中的MANIFEST文件是可以的。 基本上,Jars可以在其中包含指向位于其他地方的其他类和ja​​r的文件,当它们指向的其他东西不存在时,您会看到类似于您获得的警告。 这些警告来自编译类路径中的Jar文件。 因此,如果您真正关心的话,您需要做的是跟踪问题jar文件,提取jar文件的内容,删除其清单文件中的“Class-Path”设置并重新创建它们。 像这样的东西(首先将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循环来帮助我浏览它们。 您可以将所有有问题的Jars复制到临时目录并运行这样的循环(bash语法):

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

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

根据这一点 ,问题在于第三方jar子中的清单中有这些参考。 可以通过将-Xlint:-path添加到编译参数来禁用该消息。

您是否检查过正在设置CLASSPATH环境变量和编译选项的位置?

有问题的路径元素最有可能出现在JAR的清单文件中。 要找到有问题的JAR,您可以运行此shell脚本,该脚本将仅提取清单文件并显示它具有的任何类路径:

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