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

Ale*_*dru 4 java dependencies jar classpath

我正在尝试运行一个ec/mobat/MOBAT.jar依赖于一些罐子的罐子ec/mobat/lib/.它适用于我:

ec/mobat/$ java -jar MOBAT.jar
Run Code Online (Sandbox Code Playgroud)

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

ec/$ java -jar mobat/MOBAT.jar
Run Code Online (Sandbox Code Playgroud)

但我得到一个例外

java.lang.NoClassDefFoundError: ibis/io/Serializable
...
Run Code Online (Sandbox Code Playgroud)

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

ec/$ CLASSPATH=... java -jar mobat/MOBAT.jar
ec/$ java -jar -cp ... mobat/MOBAT.jar
Run Code Online (Sandbox Code Playgroud)

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

更新: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
Run Code Online (Sandbox Code Playgroud)

Tho*_*ung 8

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

java -classpath b.jar;c.jar -jar a.jar //does not work see below
Run Code Online (Sandbox Code Playgroud)

";" 对于unix来说,系统依赖于windows":".

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

java -classpath b.jar;c.jar;a.jar mobat.Launcher
Run Code Online (Sandbox Code Playgroud)

会产生相同的结果.

或者,可以将类路径定义添加到Manifest文件中.您的清单文件可以包含该属性.

Class-Path: lib/b.jar lib/c.jar
Run Code Online (Sandbox Code Playgroud)

然后

java -jar a.jar
Run Code Online (Sandbox Code Playgroud)

会工作.

编辑:

我认为-jar和-cp可以一起使用.但是java工具文档很清楚:

-jar
使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置.

只有manifest和everything explict(classpath和main class)版本才有效.