Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从不同目录运行jar找不到所需的依赖项_Java_Jar_Classpath_Dependencies - Fatal编程技术网

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

Java 从不同目录运行jar找不到所需的依赖项,java,jar,classpath,dependencies,Java,Jar,Classpath,Dependencies,我正在尝试运行一个jarec/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/$ CLASSPA

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

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

java -classpath b.jar;c.jar -jar a.jar //does not work see below
对于windows“;”依赖于系统“:”对于unix

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

java -classpath b.jar;c.jar;a.jar mobat.Launcher
会产生同样的结果

或者,也可以添加到清单文件中。您的清单文件可能包含该属性

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

会有用的

编辑:

我认为-jar和-cp可以一起使用。但问题很清楚:

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


只有manifest和everythingexplict(classpath和main类)版本可以工作。

不能同时使用-cp和-jar

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

应在窗户和窗户上工作

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


你能在Unix上工作吗?你能发布MOBAT.jar的清单吗?它对lib文件夹中的jar定义了一些依赖关系吗?我不想运行这个类或修改jar(它是一个库,不是我的源代码),所以第二个和第三个解决方案不起作用(我实际上尝试了第二个,但得到了一个不同的错误)。正如我在问题中所解释的,我已经尝试了第一种解决方案:在类路径中传递jar,但仍然不起作用。您是否向jar xft检查过该类是否在任何jar中?我知道了,但仍然,我不明白为什么
ec/mobat$java-jar mobat.jar
找到其他jar。你的答案是:我只能运行位于当前目录中的jar!我真的希望不是这样,还有一件事:我试图修改MANIFEST.MF,但现在我得到了
java.io.IOException:line太长了
java -jar a.jar