2010-04-09 175 views
8

我爲Java項目開發了一個模塊。該模塊取決於外部庫(fastutil)。問題是,fastutil.jar文件比整個項目本身(14 MB)重兩倍。我只使用庫中的一小部分類。模塊現在已經完成,未來沒有人可能擴展它。有沒有一種方法可以將相關課程僅提取到某些fastutil_small.jar,以便其他人不必下載所有這些額外的重量?減少外部jar文件的大小

+0

其實你想要什麼? – Venkat 2010-04-09 10:00:03

+0

好吧,將我的模塊添加到項目中。這是一些相對較小的Java軟件包。我想要的只是我對'fastutil'幾個類的依賴不應該將項目的規模增加三倍。 – 2010-04-09 10:31:17

回答

8

模糊工具(如ProGuard)通常提供了一個功能,可以從jar文件中刪除未使用的類(甚至字段和方法)。但是,您必須小心地確認一切仍然有效,因爲您可能正在使用反射來訪問ProGuard無法分析的類或方法。

您只能使用該功能,並已得到相當長的一段節省

或者你也可以與其他節省空間的模糊技術(如類和方法重命名)結合起來,以在較硬的成本節省更多空間調試(您的堆棧跟蹤將變得更難分析)。

+1

+1前5個字與我的想法完全一致,因爲我從proguard指令中讀取 – 2010-04-09 10:13:02

+0

'ProGuard要求輸入罐的庫罐(或戰爭,耳朵,拉鍊或目錄)爲指定。這些本質上是編譯代碼所需的庫。 ProGuard使用它們來重建正確處理所需的類依賴關係。圖書館自己始終保持不變。你仍然應該把它們放在最終應用程序的類路徑中。' 但是,減少庫jar文件的大小正是我想要的(或者我使用了錯誤的詞彙嗎?)。我錯過了什麼? – 2010-04-09 10:32:44

+0

@joe:你可以很容易地解決這個問題,通過'-injars'指定庫而不是'-libraryjars' – 2010-04-09 10:40:10

0

是的一個原油是有你的原始罐的備份。然後從jar中刪除所有未使用的類文件。並且可能會有其他類的內部引用,您可以在需要時添加它們。即在執行時可能會拋出一個沒有發現異常的類,因此可以將該類從原始jar添加到該jar中。

5

從fastutil的installation instructions

注意,jar文件是巨大的,由於大量的類:如果您打算運往自己的罐子一些fastutil類包括在內,你應該看看AutoJar(也可在JPackage上獲得)自動提取必要的類。

+0

是的,我做了rtfm :)我只是沒有完全設法做任何有用的事情呢(noob,記住?:)) – 2010-04-09 10:37:19

+1

事實證明,我所要做的就是嘗試三次。 – 2010-04-09 11:01:51

2

由於fastutil是LGPL開源軟件,您可以將相關的源文件複製到您的項目中,然後刪除該jar文件。編譯器會告訴你是否有你需要的所有文件。只要保持軟件包的原樣,並將fastutil許可證文件的副本放在最上面。