2009-11-21 79 views
4

我想运行一个罐子ec/mobat/MOBAT.jar,这取决于位于ec/mobat/lib/的一些罐子。它的工作原理,如果我做的:从不同目录运行jar无法找到所需的依赖关系

ec/mobat/$ java -jar MOBAT.jar 

不过,我希望能够从另一个目录

ec/$ java -jar mobat/MOBAT.jar 

运行jar但我得到一个异常

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

我试图通过所需的罐子类路径

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

你能张贴的清单MOBAT.jar?它是否在lib文件夹中定义了对jar的一些依赖项? – 2009-11-21 14:56:37

+0

@Thomas Jung:完成! – Alexandru 2009-11-21 15:00:35

回答

8

类路径必须包含你根据每个罐子。

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

“;”是windows系统依赖的“:”为unix。

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

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

会产生相同的结果。可以将classpath definitions添加到清单文件。您的清单文件可能包含该属性。

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

然后

java -jar a.jar 

会工作。

编辑:

我认为罐子和-cp可以一起使用。但java tools documentation是明确的:

罐子
当您使用此选项,JAR文件是所有用户 类的源,和其他用户类路径 设置将被忽略。

只有清单和所有显式(类路径和主类)版本都有效。

+0

我不想运行类或修改jar(它是一个库,不是我的源代码),所以你的第二和第三个解决方案不起作用(我实际上尝试了第二个,但得到了不同的错误)。正如我在问题中所解释的那样,我已经尝试了第一种解决方案:将jar放入classpath中,但仍然无效。 – Alexandru 2009-11-21 15:40:10

+0

你是否用罐子xft 检查课堂是否在任何罐子里? – 2009-11-21 15:44:27

+0

请填写完整的命令行,填入“...”。 – 2009-11-21 15:45:58

0

不能使用-cp和罐子一起

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

应工作在Windows和

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

应在Unix上运行

相关问题