从不同目录运行jar无法找到所需的依赖项

时间:2009-11-21 14:35:23

标签: java jar classpath dependencies

我正在尝试运行一个jar ec/mobat/MOBAT.jar,这取决于ec/mobat/lib/中的一些jar。如果我这样做,它可以工作:

ec/mobat/$ java -jar MOBAT.jar

但是我希望能够从另一个目录运行jar

ec/$ java -jar mobat/MOBAT.jar

但我得到了一个例外

java.lang.NoClassDefFoundError: ibis/io/Serializable
...

我试图在类路径中传递所需的jar

ec/$ CLASSPATH=... java -jar mobat/MOBAT.jar
ec/$ java -jar -cp ... mobat/MOBAT.jar

但我得到完全相同的例外。任何修复?

更新:MANIFEST.INF包含以下内容:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: Selmar Kagiso Smit
Main-Class: mobat.Launcher
Implementation-Version: 1.3.4

2 个答案:

答案 0 :(得分:8)

类路径必须包含您依赖的每个jar。

java -classpath b.jar;c.jar -jar a.jar //does not work see below

“;”对于unix来说,系统依赖于windows“:”。

jar开关用于选择执行主类的jar文件(清单文件中的Main-Class:mobat.Launcher)。命令行:

java -classpath b.jar;c.jar;a.jar mobat.Launcher

会产生相同的结果。

或者可以将classpath definitions添加到Manifest文件中。您的清单文件可以包含该属性。

Class-Path: lib/b.jar lib/c.jar

然后

java -jar a.jar

会起作用。

修改

我认为-jar和-cp可以一起使用。但java tools documentation很清楚:

  

<强> -jar
  使用此选项时,JAR文件是所有用户的来源   类和其他用户类路径   设置被忽略。

只显示清单和所有内容(类路径和主类)版本。

答案 1 :(得分:0)

你不能一起使用-cp和-jar

java -cp myjar.jar;lib/*;. mypackage.MyClass

应该适用于Windows和

java -cp myjar.jar:lib/*:. mypackage.MyClass

应该在Unix上运行