是否有任何工具列出應用程序有效使用哪些類和哪些類,甚至更好地自動修剪JAR庫以僅提供既被引用又被使用的類?如何確定Java程序使用哪些類?
回答
請記住,正如halting problem所證明的那樣,您無法明確指出某個特定類是否被使用。至少在任何適度複雜的應用程序上。這是因爲類不僅在編譯時綁定,而且可以加載:
- 基於XML配置(例如Spring);
- 從屬性文件(例如JDBC驅動程序名稱)加載;
- 動態添加註釋;
- 作爲外部輸入(例如,用戶輸入,來自數據庫或遠程過程調用的數據)的結果加載;
- 等
所以只是看着源代碼是不夠的。話雖如此,任何合理的IDE將爲您提供依賴分析工具。 IntelliJ當然會。
你真正需要的是運行時檢測你的應用程序正在做什麼,但即使這樣也不能保證。畢竟,由於奇怪的輸入組合,一個特定的代碼路徑可能會出現在千萬次運行中,因此無法保證您的覆蓋範圍。
雖然這樣的工具確實有一些價值。你可能想看看像Emma。 Profiler如Yourkit可以給你一個代碼轉儲,你也可以進行分析(儘管這樣做不會很好地獲得瞬態對象)。
就我個人而言,除了IDE會告訴你什麼之外,我發現的價值不大:刪除未使用的JAR。比這更細化的只是要求一點點到沒有收穫的麻煩。
你可以嘗試JarJar http://code.google.com/p/jarjar/
它修剪JAR依賴。
專門創建一個胖的jar和一個jar只是你的代碼。使用'java -jar jarjar.jar找到class code.jar fat.jar',它將列出你的依賴關係。您可以創建一個基於此的「保留」語句的規則文件,然後將您的胖罐加工爲最小化的罐子。 – 2015-12-09 17:13:13
是的,你想要ProGuard。它是一個完全免費的Java代碼收縮器和混淆器。配置簡單,快速而有效。
只要確保提供了正確的「根」類列表,從中可以搜索到引用,並且您不會忘記您通過反射使用的任何類。 – 2009-01-24 10:06:05
對於大多數情況下,只需使用javac即可輕鬆完成。
刪除你現有的類文件。使用入門級的名稱調用javac。它會編譯這些必要的類,但不會再有。任務完成。
我認爲OP意味着圖書館以及你自己的課程 – Chii 2009-01-24 12:34:10
- 1. 如何確定在應用程序中使用哪些JAR
- 2. 確定類中使用哪些類
- 3. 如何確定哪些使用jQuery
- 4. 如何確定哪些代碼行參與了Java程序的特定執行?
- 5. 確定程序集引用某些類
- 6. 確定哪些控制我的應用程序使用
- 7. 如何確定哪些類可以序列化
- 8. 如何確定哪些正在運行的應用程序使用.Net
- 9. 確定我的Java程序的哪些部分需要優化
- 10. 如何確定哪些功能正在使用哪個頭?
- 11. 確定使用哪個類
- 12. Delphi如何確定哪個程序調用另一個程序?
- 13. 如何確定哪些Visual Studio解決方案使用哪些項目?
- 14. 如何確定Java EE 6應用程序服務器類型?
- 15. 如何確定Java應用程序中的主類?
- 16. 如何確定哪個程序在VB 2005中使用文件?
- 17. 如何在程序級別確定某些java類/接口的存在?
- 18. 確定全局使用哪些變量
- 19. 如何確定哪些appstore用戶正在使用?
- 20. 如何知道哪些類正在通過哪些類加載程序在Java中加載?
- 21. ProGuard - 如何正確使用Android?要保留哪些類和庫?
- 22. 確定哪些客戶端使用Java NIO
- 23. 如何確定使用java哪些網站已在瀏覽器中打開?
- 24. 不確定在Heroku/rails中包含哪些應用程序
- 25. 如何確定哪些驅動程序可用於PHP(在Linux系統上)odbc?
- 26. 哪些應用程序使用Java進行用戶登錄?
- 27. 你如何確定哪些庫沒有被使用
- 28. 如何確定網站後端使用了哪些技術?
- 29. 如何確定哪些容器使用泊塢窗容積?
- 30. 如何確定使用WMI連接哪些打印機
如果我們不動態加載類會怎麼樣?換句話說,沒有XML配置,屬性文件,註釋,rpc和什麼。那麼這樣的工具可以保證*工作嗎? – Pacerier 2014-06-13 11:02:35