2010-07-06 60 views
1

我製作了一個Java Applet,它依賴於某些第三方的libriaries以及通過JNI調用的DLL。這些顯然不會安裝在客戶端計算機上。有沒有辦法將這些第三方的libriaries和外部DLL打包到我的Applet的JAR中,以便它可以被任何基於Java安裝的客戶端運行?部署具有第三方依賴關係的Java Web Applet

回答

1

在web應用程序中使用JNI是胃灼熱的祕訣,特別是在Windows中。

  • 顯然,您不能在WAR文件中部署該DLL,並且可能需要事先由部署人員運行單獨的安裝程序。
  • 您必須確保java.library.path已正確設置,這通常是由應用程序服務器中的設置完成的,而不是WAR文件中可部署的。
  • 如果您嘗試運行該Web應用程序的多個實例,則JNI將該本機類與該庫鏈接的方式將導致類加載器頭痛。解決此問題的一種方法是將包含的JAR文件移動到共享類加載器(如Tomcat的公用文件夾)中,但它有其自身的複雜性。
+0

謝謝,認爲它不值得頭痛。關閉以找到不同的解決方案。 – 2010-07-06 17:49:28

1

反正是有包裝這些第三 方libriaries

在Eclipse中,下的Java項目屬性(右鍵單擊),我可以做:

Export... => Export as Runnable JAR 

然後我告訴它將我的jar依賴關係打包到那個導出的JAR中。 導出的JAR將包含所有依賴關係。

alt text http://www.ubuntu-pics.de/bild/97131/selection_016_mg6IDm.png

+0

這不會處理支持JNI本機類所需的本機庫。 – 2010-07-06 17:42:45

+0

從不這樣說,不值得頭痛。爲了反映這一點,我截斷了OP的報價。 – bakkal 2010-07-06 20:18:46

1

我的話題不是專家,但有對所有這些問題工作方案。他們可能會讓你頭痛,但有些事情只能通過這種方式來完成(我相信你與Entrust CSP的問題就是其中之一)。

您可以從OpenOCES-project查看OpenSign。神奇的事發生在org.openoces.opensign.client.applet.bootstrap中。

我也相信JNLPAppletLauncher解決了同樣的問題,但我沒有與我的經驗。