簡體   English   中英

將多個罐子合並到一個罐子里

[英]Merging Multiple Jars in to a Single Jar

我的應用程序需要多個罐子才能工作。 由於它是桌面應用程序,因此無法讓用戶負責安裝。 所以在我的構建腳本中,我將jar內容解壓縮到我的構建目錄中刪除清單文件,編譯我的軟件並再次將其jar。 一切正常,因為我的問題是這個過程有長期的副作用嗎?

在過去,有些JAR具有奇怪的內容(比如包含com.ibmcom.IBM的DB2驅動程序;在Windows文件系統中解壓縮后,這兩個包將被合並)。

您需要注意的唯一問題是簽名的jar和META-INF中的其他文件,這些文件在多個源JAR中可能具有相同的名稱。

所有這些問題的簡單解決方案是使用One-JAR 它允許首先將幾個JAR包裝成一個而不解壓縮它們。 並閱讀此答案: 將發布合並到一個JAR文件的最簡單方法

一種更簡單的解決方案(IMO)使用Maven的組裝插件 ,其也被在回答其連接到在另一個問題之一描述的先前的問答 如果您使用Maven(本身就是推薦的工具)作為構建工具,則可以使用此功能。

另一個很好的選擇是ProGuard ,它也可以縮小和/或混淆代碼。

如果某些罐子已簽名,則通過解壓縮/重新包裝來丟失簽名。

如果你想讓最終用戶沒有大驚小怪的方式啟動具有多個jar依賴項的程序,你可能需要查看Launch4jJsmooth (我更喜歡Launch4j)。 兩者都是創建將jar(s)和JRE包裝在一起的可執行文件的程序,因此對於最終用戶來說,它看起來與任何其他可執行文件沒有什么不同。

如果您的主要目標平台是Windows桌面,那么您還可以考慮從應用程序的jar中生成Windows本機exe

One-JAR將完成這項工作,並有一個新版本(0.97),它支持Spring和Guice等框架,用戶現在將這些框架打包到One-JAR檔案中。 http://one-jar.sourceforge.net

Ference Hechler還使用Eclipse導出向導在Eclipse中做了一些很棒的工作:我們在Eclipse工作的FatJar / One-JAR上一起工作,我可以推薦它作為一種方法,雖然我不知道它處理得有多好框架。

那么你就丟掉了第三方罐子的清單,這樣可能會給你帶來麻煩。 例如,您可能會通過丟棄“密封”屬性來導致安全問題。

為什么不創建一個簡單的安裝程序和腳本來啟動正確設置CLASSPATH的應用程序?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM