2011-09-19 71 views
3

我正努力让我的Java程序在AIX上运行。我在Windows上使用Eclipse创建了一个可运行的Jar文件,下面是jRams.jar。我一直在得到一个没有找到类的错误,直到最后我把所有的外部库放在同一个目录下。即使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。为什么这不起作用?

UPDATE

感谢您直接到该点的答案。我现在明白了Java应用程序和清单文件的性质。

原来我的ftp客户端在ASCII模式下传输,而不是二进制文件,所以jar文件被破坏了。尽管如此,我还是学到了很多东西。

回答

6

使用-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

您需要将所有这些JAR添加到运行时CLASSPATH中,方法是将-classpath参数。 AIX需要您使用:

+0

当使用'-jar'选项时,'-classpath'选项被忽略。在'-jar'上的'man java':*当你使用这个选项时,JAR文件是所有用户类的来源,而其他用户类路径设置被忽略* – aioobe

0

您必须指定完整路径(如果库不在与jRams相同的目录中),或者只需指定清单文件中jar文件的名称(如果所有依赖关系jar都是在同一个文件夹中)。备选方法指定使用-cp参数的所有从属罐子的路径。

这假设每个依赖性在要从执行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

编辑

+1

当使用'-jar'选项时' -classpath'选项被忽略。从'-jar'上的'man java':*当您使用此选项时,JAR文件是所有用户类的来源,并且其他用户类路径设置将被忽略。* – aioobe

+0

'@ aioobe'已编辑 – Bitmap

相关问题