2009-01-24 62 views

回答

9

請記住,正如halting problem所證明的那樣,您無法明確指出某個特定類是否被使用。至少在任何適度複雜的應用程序上。這是因爲類不僅在編譯時綁定,而且可以加載:

  • 基於XML配置(例如Spring);
  • 從屬性文件(例如JDBC驅動程序名稱)加載;
  • 動態添加註釋;
  • 作爲外部輸入(例如,用戶輸入,來自數據庫或遠程過程調用的數據)的結果加載;

所以只是看着源代碼是不夠的。話雖如此,任何合理的IDE將爲您提供依賴分析工具。 IntelliJ當然會。

你真正需要的是運行時檢測你的應用程序正在做什麼,但即使這樣也不能保證。畢竟,由於奇怪的輸入組合,一個特定的代碼路徑可能會出現在千萬次運行中,因此無法保證您的覆蓋範圍。

雖然這樣的工具確實有一些價值。你可能想看看像Emma。 Profiler如Yourkit可以給你一個代碼轉儲,你也可以進行分析(儘管這樣做不會很好地獲得瞬態對象)。

就我個人而言,除了IDE會告訴你什麼之外,我發現的價值不大:刪除未使用的JAR。比這更細化的只是要求一點點到沒有收穫的麻煩。

+0

如果我們不動態加載類會怎麼樣?換句話說,沒有XML配置,屬性文件,註釋,rpc和什麼。那麼這樣的工具可以保證*工作嗎? – Pacerier 2014-06-13 11:02:35

3

你可以嘗試JarJar http://code.google.com/p/jarjar/

它修剪JAR依賴。

+0

專門創建一個胖的jar和一個jar只是你的代碼。使用'java -jar jarjar.jar找到class code.jar fat.jar',它將列出你的依賴關係。您可以創建一個基於此的「保留」語句的規則文件,然後將您的胖罐加工爲最小化的罐子。 – 2015-12-09 17:13:13

4

是的,你想要ProGuard。它是一個完全免費的Java代碼收縮器和混淆器。配置簡單,快速而有效。

+1

只要確保提供了正確的「根」類列表,從中可以搜索到引用,並且您不會忘記您通過反射使用的任何類。 – 2009-01-24 10:06:05

0

對於大多數情況下,只需使用javac即可輕鬆完成。

刪除你現有的類文件。使用入門級的名稱調用javac。它會編譯這些必要的類,但不會再有。任務完成。

+0

我認爲OP意味着圖書館以及你自己的課程 – Chii 2009-01-24 12:34:10

相關問題