2011-09-19 100 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

相關問題