2011-02-17 53 views
0

我在使用嵌入式jar庫在網頁中工作的Java Applet時遇到了一些麻煩。具體來說,我得到一個NoClassDefFoundError,它包含在打包在jar文件中的庫中,這些jar文件本身包含在我的Applet的單個jar文件中。後者的常規類(即不包含在嵌套jar文件中的那些類)由Applet啓動器定位,沒有任何問題。獲取Java Applet以查找嵌入到單個jar文件中的jar庫

這裏是我的HTML代碼:

<applet code="Applet.class" archive="myApplet.jar" width="600" height="600" title="MyApplet"> 

說了,MyApplet.jar裏邊有另外兩個jar文件:library1.jar和library2.jar在根級別。我如何使它們可訪問以便啓動程序可以找到它們?我曾嘗試將library1.jar和library2.jar添加到存檔屬性,但沒有奏效。

回答

0

Java不直接在其他jar文件中支持jar文件。

您將需要一個自定義類加載器,它知道如何使用它們。 one-jar項目提供了這樣一個類加載器,並且可以用ant來編寫腳本。如果你使用Eclipse,Export - > Runnable jar有一個選項可以直接用one-jar classloader創建一個jar。

請注意,由於類加載器需要在內存中緩存更多信息,因此內存使用率會更高。

+0

感謝您的回答。我嘗試使用包含one-jar的fat-jar插件,但生成的jar文件未加載到網頁中。它甚至找不到我的主類(看起來現在包含在main jar文件中的fat jar文件的main子目錄中)。我需要在HTML applet代碼中編寫哪些代碼才能找到所有必需的文件? – Tamori 2011-02-17 11:32:42

0

您可以使用maven shade插件來生成一個包含所有內容的jar。

1

你可以從你的依賴瓶中取出文件,並將它們包含在你的jar文件中。假設你有一個bin,src和libs目錄。

cd bin 
find ../libs -type f -name \*.jar -exec jar xfv {} \; 
rm -rf bin/META-INF 
cd .. 
jar cfv yourjar.jar -C bin/ .