错误的路径警告,它来自哪里?

时间:2009-08-27 22:58:18

标签: java compiler-warnings

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

警告:: [路径]坏路径元素“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的配置中找不到任何地方(我对整个项目进行了深思熟虑),其中任何内容都指向这些文件。在这个名字下它们确实不存在了,但是什么引用了它们?

4 个答案:

答案 0 :(得分:28)

我认为@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。

答案 1 :(得分:24)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

有问题的路径元素最有可能出现在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