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

Yis*_*hai 25 java compiler-warnings

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

警告:: [path]坏路径元素"C:\ Users\User\MyJava\common\lib\junit.jar":没有这样的文件或目录警告:: [路径]坏路径元素"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的配置中找不到任何地方(我对整个项目进行了深思熟虑),其中任何内容都指向这些文件.他们在这个名字下确实不存在,但是什么引用了它们?

Bre*_*ode 30

我认为@Yishai有权利(我会给他一个投票让球得分).我一直遇到这种情况.在我认为对Java语言的一个可怕决定中,他们认为允许类路径设置进入jar文件中的MANIFEST文件是可以的.基本上,Jars可以在其中包含指向位于其他位置的其他类和ja​​r的文件,当它们指向的其他东西不存在时,您会看到类似于您获得的警告.这些警告来自编译类路径中的Jar文件.因此,如果您真正关心的话,您需要做的是跟踪问题jar文件,提取jar文件的内容,删除其清单文件中的"Class-Path"设置并重新创建它们.

#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 ./*
Run Code Online (Sandbox Code Playgroud)

这应该够了吧!

我不认为你只想抑制这些消息,因为如果你想完全控制你的类路径上的内容,你应该找出这些清单文件,并确保它们不会以你不这样做的方式搞乱类路径知道关于.

可能你需要查看大量的jar文件,所以我通常最终使用shell循环来帮助我浏览它们.您可以将所有有问题的Jars复制到临时目录并运行这样的循环(bash语法):

for i in *.jar; do echo $i; jar xf $i; grep -i 'class-path' ./META-INF/MANIFEST.MF; done
Run Code Online (Sandbox Code Playgroud)

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


Yis*_*hai 27

根据这个,问题是,在第三方坛子里有在manifest这些参考.可以通过将-Xlint:-path添加到编译参数来禁用该消息.