有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

当我用编译器警告(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\xmlapi.jar”:没有这样的文件或目录

还有更多

这是在使用IDEA 8.1.3。我在IDEA的配置中找不到任何指向这些文件的地方(我用灰色标出了整个项目)。它们确实都不在那个名字下了,但它们是什么意思呢


共 (1) 个答案

  1. # 1 楼答案

    我认为@Yishai有权这么做(我会投他一票让球滚起来)。我一直都碰到这个。在我认为对Java语言来说是一个可怕的决定中,他们决定允许类路径设置进入jar文件中的清单文件。所以本质上,JAR中可以有指向其他类的文件,以及位于其他地方的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在其清单中有类路径设置。这样你就有希望找出你需要采取行动的罐子