我正在尝试运行一个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
答案 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上运行