2012-03-08 47 views
57

我想知道從eclipse提取和封裝庫到jar文件與創建可運行jar文件之間的區別。提取和封裝庫到jar文件之間的區別

如果我的程序(runnable jar)使用其他需要這些外部庫(jar)的類,我應該選擇什麼?

+0

可能重複[What is th運行的JAR庫處理選項E之間的區別?(http://stackoverflow.com/questions/8302894/what-is-the-difference-between-runnable-jar-library-handling-options) – 2014-12-12 01:38:28

回答

38

如果要將jar放入生成的jar文件中,可以使用打包方法。 例如,如果您正在使用Apache庫或其他一些第三方jar文件,你可能希望保留這些罐子在生成的JAR保存。在這種情況下,請使用包裝。 「將所需的庫打包到jar文件中」選項將org.eclipse.jdt.internal.jarinjarloader包的類放入生成的文件中,並且此包位於生成的jar文件的根目錄下。由於Eclipse的jar加載器類,此選項還根據大小創建較大的jar文件。

提取所需的庫將導致按照包命名約定將第三方庫的類放入jar文件中,例如,如果你打開罐子的內容,你可以看到在org.apache..包一些類。

主類的條目是MANIFEST.MF文件這些jar文件之間的不同:

主要類條目,當你需要的庫:

Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 

主要類條目,當你提取需要的庫:

Main-Class: YourMainClass 
+5

什麼優勢或者利用然後打包? – ctekk 2012-03-08 13:06:54

+1

的包裝,你可以jar文件加載到通過「JarRsrcLoader」類的產生罐子。如果你是使用第三方罐子和想你的應用程序代碼與這些罐子結合起來,你可以使用Eclipse的包裝程序是這樣的。看到我編輯的答案。 – Juvanis 2012-03-08 13:25:09

+10

請注意性能問題。我曾經使用jarinjarloader將我的圖書館罐子包裝在我的應用程序jar包中,直到昨天。然後,更新JRE到版本8日更新31(在Windows上)後,執行我的應用程序變得極大慢(高達10倍)。當我選擇將庫罐的內容提取到我的罐子裏時,問題就解決了。 – Giuseppe 2015-02-25 11:58:41