我正在努力让我的 Java 程序在 AIX 上运行。我在 Windows 上使用 Eclipse 创建了一个可运行的 Jar 文件,jRams.jar
下面。我一直收到找不到类的错误,直到最后我将所有外部库放在同一目录中。
$ ls
JAXB2_20081030.jar
JAXB2_20110601.jar
activation.jar
asjava.jar
commons-beanutils-1.8.3.jar
commons-beanutils-bean-collections-1.8.3.jar
commons-beanutils-core-1.8.3.jar
commons-codec-1.5.jar
commons-collections-3.2.1.jar
commons-configuration-1.6.jar
commons-digester-2.1.jar
commons-jxpath-1.3.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
commons-logging-adapters-1.1.1.jar
commons-logging-api-1.1.1.jar
jRams.jar
jaxb-api.jar
jaxb-impl.jar
jaxb-xjc.jar
jaxb1-impl.jar
jremote.jar
jsr173_1.0_api.jar
log4j-1.2.16.jar
netty-3.2.4.Final.jar
$
我仍然收到找不到类的错误。
$ java -jar jRams.jar
The java class is not found: com.jbase.jremote.JRemoteException
jremote.jar
肯定包含 JRemoteException。为什么这不起作用?
更新
感谢您中肯的回答。我现在更好地理解了 Java 应用程序和 list 文件的本质。
原来我的 ftp 客户端是以 ASCII 模式而不是二进制模式传输的,所以 jar 文件已损坏。尽管如此,我还是学到了很多东西。
最佳答案
当使用-jar
选项时,您需要在manifest file 中指定哪些jar 文件应该在您的类路径中。 .仅仅将所需的 jar 文件放在同一目录中是不行的。
在您的 list 中添加一行:
Class-Path: JAXB2_20081030.jar:JAXB2_20110601.jar:....:netty-3.2.4.Final.jar
或者跳过-jar
选项并使用
java -cp JAXB2_20081030.jar:....:netty-3.2.4.Final.jar:jRams.jar pkg.JRamsMain
它应该可以正常工作。
(请注意,在 *nix 系统上,与 Windows 机器不同,类路径中的 jar 文件应使用 :
而不是 ;
分隔。)
进一步阅读:
关于java - 即使 jar 文件在工作目录中也找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469711/