我需要從第三方JAR中刪除未使用的類。爲什麼我應該使用工具?從第三方庫和JAR中刪除粗糙的類
我已經嘗試過使用ProGuard。但是,它只從項目本身中刪除未使用的類,但圖書館罐(第三方)始終保持不變。
我需要從第三方JAR中刪除未使用的類。爲什麼我應該使用工具?從第三方庫和JAR中刪除粗糙的類
我已經嘗試過使用ProGuard。但是,它只從項目本身中刪除未使用的類,但圖書館罐(第三方)始終保持不變。
您可以創建一個超級罐子然後使用ProGuard。重新將圖書館類重新包裝成罐子將是一項挑戰,但從你的問題的精神,你會更喜歡超級罐子。
正如其他海報評論到的,您仍然需要小心通過這麼多被濫用和誤解的反射機制加載的類。
@Joonas Pulakka是對的。但如果你仍然真的想這樣做,並確保你的應用程序不會因爲ClassNotFoundException
而失敗,請使用選項-verbose:class運行你的應用程序,執行所有存在的用例,取出包含所有加載類的日誌。然後獲取你的第三方庫的所有類的列表,並從你的庫中提取所有從未加載過的類。然後創建另一個jar文件,其中只包含「需要」的類並祈禱:)
祝你好運。
+ AlexR Lool,我說的是35.7 MB的JAR。 –
Java只在使用時加載類。刪除類只會導致你的問題,並不會在運行時幫助你。只有一部分代碼會被加載,36 MB的代碼並不多。你有多少內存?現在大多數PC至少有2000 MB如果您通過慢速鏈接下載applet或Java WebStart應用程序,我會想象您正在使用pack200(使罐子更小),並且已經包含了最少的庫。
+勞瑞謝謝你的回答,我理解你的觀點。但是,要求是從JAR中消除未使用的類,並將所有Jars放入單個FAT JAR中。我知道這可能是無用的,但他們只希望它更清潔。 –
您可以將它們全部放入單個JAR中。您應該讓他們意識到這可能會使應用程序不穩定並且不可支持。即何時,如果不這樣做,至少你會警告他們這是個壞主意。當他們所要求的是不合理的時候,你不希望他們責怪你沒有做好你的工作。 –
+勞瑞我會做。感謝您的建議:) –
瞭解您正在使用的課程和圖書館是一件好事,即使存在風險(如Peter指出的)去除未使用的東西,攜帶任何類型的超重行李都有成本,而且您不應該繼續積累。如果你使用反射,然後處理你使用的是什麼,並系統地擺脫你不需要的東西。精簡代碼庫有益於您更好地理解。
爲什麼要從第三方罐子中移除課程? – Rakesh
這通常是一個壞主意,因爲 - 感謝[反射](http://download.oracle.com/javase/tutorial/reflect/index.html) - 沒有辦法真正知道哪些類未使用,哪些是未使用的不是,尤其是涉及到第三方JAR時(即你不知道它們是如何在內部工作的)。 –
+ Joonas感謝您的回答。你是對的,但[ProGuard](http://proguard.sourceforge.net)可以處理反思和內省。那麼,有沒有其他工具可以對第三方Jars進行相同處理? –