使用命令行运行Java应用程序并带有外部jar文件

12

我有一个外部的jar文件(有包结构),其中包含主类,我可以像这样从命令行运行应用程序:

java -jar example.jar

但是我还有一个 test.class 文件在这个 jar 文件外面,而且这个 jar 文件里的一些类会调用 test.class 中的方法。我该如何在命令行中指定要被 jar 文件使用的 test.class 文件呢?尝试了许多方法,但总是显示:

NoClassDefFoundError for test.class

注意:test.class文件还使用了example.jar文件中的class文件,具有自己的包结构。

我知道我可以把它们放在一个jar文件中,但不幸的是,我需要将test.class文件分开。


2
请在Oracle教程中阅读有关类路径的内容。 - Thorbjørn Ravn Andersen
3个回答

16
如果类在 bin 目录中:
java -cp xxx.jar;bin pck1.pck2.MainClass

如果类在当前目录中:

java -cp xxx.jar;. pck1.pck2.MainClass

手册中有更多信息,请至少阅读一次... ;-)


抱歉,不在工作区中,没有bin目录。假设test.class文件与example.jar文件在同一个文件夹中。 - LifeOnCodes
2
假设test.class文件与example.jar文件在同一个文件夹中。你为什么不自己动手去完成它,而是试图让我们按照你的要求编写代码呢? - Andrew Thompson
我想我忘了提到一件重要的事情:test.class也使用example.jar中的类文件,并且它有自己的包结构...你使用;来分隔类路径以搜索类文件吗? - LifeOnCodes
1
Java.exe -? 这个命令有多难啊? - Qix - MONICA WAS MISTREATED
1
@Aubin 我在问LifeOnCodes哈哈。 如果他只是做了java.exe -?,这个问题就可以为他总结一下了。 - Qix - MONICA WAS MISTREATED
它能工作。我想强调选项-cp xxx.jar;.应该出现在包含主方法的类之前,否则会出现令人讨厌的“错误:找不到或加载主类”的提示。 - kayochin

8
在Linux系统中,编译和运行Java程序需要使用外部JAR文件。
javac -cp </path/jar1>:<path/jar2>:<path/jar3> MainClass.java

如果编译器出现弃用警告,您可以使用-Xlint:deprecation参数重新编译。
javac -Xlint:deprecation -cp </path/jar1>:<path/jar2>:<path/jar3> MainClass.java

最后,运行Java程序:

java -cp </path/jar1>:<path/jar2>:<path/jar3>:. MainClass

如果您想在后台运行Java进程,可以使用 nohup命令。

nohup java -cp </path/jar1>:<path/jar2>:<path/jar3>:. MainClass &

4
您可以使用以下命令来运行Java主类或Java JAR文件:
java -Djava.ext.dirs=E:\lib  E:\Executable\MyMainClass

java -Djava.ext.dirs=E:\lib  E:\Executable\purging.jar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接