Java命令行出现带.jar库的问题

7

我有一个单独的 .java 文件(driver.java),想要通过命令行编译和运行它。它使用了名为 EXT.jar 的外部库,其结构只是一个名为 EXT 的文件夹,其中包含几十个类。

所以我运行:

javac -cp EXT.jar driver.java

这个类可以成功编译。
然后当我运行时:
java -cp EXT.jar driver

我遇到了一个java.lang.NoClassDefFoundError错误。
奇怪的是,如果我解压JAR文件(现在在根目录下有一个名为EXT的文件夹),最后一个命令就可以正常工作!驱动程序将会执行!
有没有办法让driver.class从EXT.jar / EXT / * class中查找所需的类文件,而不是实际的EXT文件夹?
谢谢!
1个回答

19

你正在将该类编译到本地目录。所以当你运行它时,需要在classpath中包含当前目录。例如:

java -cp .;EXT.jar driver

或者在Linux中:

java -cp .:EXT.jar driver

根据您现在的设置,您正在说您的类路径包括EXT.jar(以及CLASSPATH环境变量中的内容),而没有其他任何内容(这就是为什么当前目录(driver.class所在的位置)被排除在外的原因)


好的。我显然需要等待15分钟才能接受答案 :) - Monster
谢谢Matt,你的回答对于我一个jar文件确实有用,但现在我需要使用另一个jar文件。这两个jar文件都在我的项目中名为“libs”的文件夹中。但是无法正常工作。我正在使用Ubuntu操作系统,请帮忙。 - AndroidGuy
1
@AndroidGuy,您可以继续列出JAR包,并用冒号分隔。例如:java -cp .:libs/one.jar:libs/two.jar MainClass - Matt
这只是我个人参考的一条注释,但你必须始终首先指定_classpath_,可执行的字节码(Java类)名称之前!例如,以下对我无效(开始拔头发):java MyApp -cp .;EXT.jar。而这个可以正常工作:java -cp .;EXT.jar MyApp - bcmoney
我相信@AndroidGuy现在已经弄清楚了,但是对于其他人来说,“java -cp .:libs/* MainClass”适用于n个JAR的情况。 - MikeF

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