即使jar文件在工作目录中也找不到类

时间:2011-09-19 10:46:47

标签: java classpath aix

我正在努力让我的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应用程序和清单文件的本质。

原来我的ftp客户端在ASCII模式而不是Binary中传输,因此jar文件已损坏。尽管如此,我学到了很多东西。

3 个答案:

答案 0 :(得分:7)

使用-jar选项时,您需要在manifest file中的类路径中指定哪些jar文件。只需在同一目录中拥有所需的jar文件就不会这样做。

在清单中添加一行说明:

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文件应使用:而不是;分隔。)

进一步阅读:

答案 1 :(得分:1)

您需要通过添加CLASSPATH参数将所有这些JAR添加到运行时-classpath。 AIX要求您使用:

分隔JAR

答案 2 :(得分:0)

您必须指定完整路径(如果库与jRams不在同一目录中)或仅指定清单文件中jar文件的名称(如果所有依赖项jar都在同一文件夹中)。备用使用-cp参数指定所有从属 jar 的路径。

示例这假设每个依赖项都在您从执行java命令的同一目录中):

java -cp commons-collections-3.2.1.jar; jaxb-impl.jar; etc.. ;jRams.jar package_to_class.MyMainClass.java

其中package_to_class为示例:com.myproj.example

<强> EDITED