我爲Java項目開發了一個模塊。該模塊取決於外部庫(fastutil
)。問題是,fastutil.jar
文件比整個項目本身(14 MB)重兩倍。我只使用庫中的一小部分類。模塊現在已經完成,未來沒有人可能擴展它。有沒有一種方法可以將相關課程僅提取到某些fastutil_small.jar
,以便其他人不必下載所有這些額外的重量?減少外部jar文件的大小
回答
模糊工具(如ProGuard)通常提供了一個功能,可以從jar文件中刪除未使用的類(甚至字段和方法)。但是,您必須小心地確認一切仍然有效,因爲您可能正在使用反射來訪問ProGuard無法分析的類或方法。
您只能使用該功能,並已得到相當長的一段節省
或者你也可以與其他節省空間的模糊技術(如類和方法重命名)結合起來,以在較硬的成本節省更多空間調試(您的堆棧跟蹤將變得更難分析)。
+1前5個字與我的想法完全一致,因爲我從proguard指令中讀取 – 2010-04-09 10:13:02
'ProGuard要求輸入罐的庫罐(或戰爭,耳朵,拉鍊或目錄)爲指定。這些本質上是編譯代碼所需的庫。 ProGuard使用它們來重建正確處理所需的類依賴關係。圖書館自己始終保持不變。你仍然應該把它們放在最終應用程序的類路徑中。' 但是,減少庫jar文件的大小正是我想要的(或者我使用了錯誤的詞彙嗎?)。我錯過了什麼? – 2010-04-09 10:32:44
@joe:你可以很容易地解決這個問題,通過'-injars'指定庫而不是'-libraryjars' – 2010-04-09 10:40:10
是的一個原油是有你的原始罐的備份。然後從jar中刪除所有未使用的類文件。並且可能會有其他類的內部引用,您可以在需要時添加它們。即在執行時可能會拋出一個沒有發現異常的類,因此可以將該類從原始jar添加到該jar中。
從fastutil的installation instructions:
注意,jar文件是巨大的,由於大量的類:如果您打算運往自己的罐子一些fastutil類包括在內,你應該看看AutoJar(也可在JPackage上獲得)自動提取必要的類。
是的,我做了rtfm :)我只是沒有完全設法做任何有用的事情呢(noob,記住?:)) – 2010-04-09 10:37:19
事實證明,我所要做的就是嘗試三次。 – 2010-04-09 11:01:51
由於fastutil是LGPL開源軟件,您可以將相關的源文件複製到您的項目中,然後刪除該jar文件。編譯器會告訴你是否有你需要的所有文件。只要保持軟件包的原樣,並將fastutil許可證文件的副本放在最上面。
- 1. 如何減少jar大小
- 2. 減少HTML文件大小?
- 3. 減少SWF文件大小
- 4. 減少.XAP文件大小?
- 5. 減少HtmlUnit庫的jar大小
- 6. 確定使用的庫,以減少JAR文件的大小
- 7. 減少圖像的文件大小
- 8. 減少散點圖的文件大小
- 9. 減少.NET中的PNG文件大小
- 10. 減少UIImage的文件大小?
- 11. 減少DOMPDF生成的文件大小
- 12. 減少pyinstaller可執行文件大小
- 13. CPP MediaFoundation - mp4文件大小減少
- 14. 熊貓和HDF5文件大小減少
- 15. 減少mercurial .hg文件夾大小
- 16. APK文件大小減少清單
- 17. 減少圖像文件大小
- 18. 減少qemu快照文件大小
- 19. 如何減少swf文件大小flex
- 20. 如何減少圖像文件大小
- 21. 減少.git文件夾大小:Jenkins版
- 22. 用php減少jpeg文件大小
- 23. Magick.NET減少gif文件大小
- 24. 使用Ghostscript減少PDF文件大小
- 25. 如何在java中減少多部分文件的大小
- 26. 減少/縮小使用JNA的Java Project的JAR大小?
- 27. Iphone發行編譯:如何減少外部庫的大小?
- 28. 調整大小後圖像的文件大小沒有減少
- 29. 減少TimePicker大小
- 30. 減少BitmapDrawable大小
其實你想要什麼? – Venkat 2010-04-09 10:00:03
好吧,將我的模塊添加到項目中。這是一些相對較小的Java軟件包。我想要的只是我對'fastutil'幾個類的依賴不應該將項目的規模增加三倍。 – 2010-04-09 10:31:17