2015-01-08 64 views
1

对不起,有些令人困惑的标题,让我解释一下。 这里是我的代码:Java不会识别由命令行设置的类路径

import java.net.URL; 
import java.net.URLClassLoader; 
public class App { 
    public static void main(String[] args) { 
     System.out.println("java.class.path="+System.getProperty("java.class.path")); 
     ClassLoader cl = ClassLoader.getSystemClassLoader(); 

     URL[] urls = ((URLClassLoader)cl).getURLs(); 

     for(URL url: urls){ 
      System.out.println(url.getFile()); 
     } 
    } 
} 

当我运行这个在Eclipse与LWJGL和Slick2d库,我得到的,符合市场预期:

java.class.path=/home/the-genius/workspace/classpath/bin:/home/the-geniu/workspace  
/libs/slick/lib/slick.jar:/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar 
/lwjgl.jar:/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar/lwjgl_util.jar: 
/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar/jinput.jar 
/home/the-genius/workspace/classpath/bin/ 
/home/the-genius/workspace/libs/slick/lib/slick.jar 
/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar/lwjgl.jar 
/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar/lwjgl_util.jar 
/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar/jinput.jar 

然而,当我出口它作为一个可运行罐子,执行通过

java -cp /home/the-genius/workspace/classpath/bin:/home/the-geniu/workspace  
/libs/slick/lib/slick.jar:/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar 
/lwjgl.jar:/home/the-genius/workspace/libs/lwjgl/lwjgl-2.9.2/jar/lwjgl_util.jar: -jar app.jar 

我得到

java.class.path=classpath.jar 
/home/the-genius/classpath.jar 

是否有任何理由发生这种情况?我如何解决它?

我在Ubuntu上运行,如果这有所作为。我也尝试过使用OpenJDK-7和Sun Java-7。

回答

3

如果您使用-cp-jar选项相同,前者将被忽略。要修复它,你可以在没有-jar(将你的jar文件添加到类路径并调用主类:java -cp app.jar App)或者将类路径添加到jar清单文件中来运行它。