回答
您需要Class Dependency Analyzer工具。引用簡介:
此工具的目的是分析Java™類文件,以便了解有關這些類之間的依賴關係的更多信息。
確實,它不會捕獲運行時依賴關係 - 但是缺少運行詳盡的100%覆蓋測試套件,您永遠無法確定是否捕獲了所有運行時依賴關係。
如果你希望你應該使用CDA作爲第一通運行時依賴,然後做最終應用的詳盡的測試,以確保有哪些是隻能通過運行時依賴引用沒有jar文件。
我可能會錯過一些東西,但我不明白這會給你一個無用的jar列表。 – 2009-11-19 14:42:47
它會告訴你應用程序依賴哪些容器,其餘的則是無用的。 – sanity 2009-11-19 14:48:45
正確 - 您可以將使用的jar與類路徑進行比較,但這是有風險的 - 在分析路徑時可能沒有使用過庫,但是必須使用此庫。 – 2009-11-19 14:49:12
我猜「刪除它們逐一檢查應用程序仍然編譯和作品」沒有預期的答案:)
(編輯:雖然這種方法上面建議可有點自動化,它仍然不知何故不好受,並必須有一個選擇,至少在編譯時依賴一些google搜索後,我發現Jar Analyzer這似乎在這個blog post解釋是這項工作一個很好的工具。
罐分析器掃描編譯依賴關係,這意味着它可以創建一個需要JAR文件的樹來編譯編譯這些JAR文件所需的JAR文件,等等。你會得到一個非常好的報告/圖表,顯示所有的JAR文件以及它們爲什麼在那裏。
你也可以看到沒有任何連接到你的代碼的JAR文件,刪除它們和他們的孩子。我在libs文件夾中發現的是,在編譯時我們的libs文件夾中的大約20%的JAR文件未被使用,並且這些是可能的JAR被刪除。
最大的缺點是,您沒有得到任何關於哪些JAR文件僅在運行時通過發現和反射來使用的暗示。這就是真正的工作開始的地方。
找出在運行時是否使用JAR文件的唯一方法是基本上把它拿出來,啓動你的應用程序並測試每個功能。如果您的應用程序規模適中,則執行100%迴歸測試需要幾個小時。所以在實踐中,我最終做了大量的猜測,快速和骯髒的測試,並且詢問了解哪些運行時依賴關係實際上正在使用中。
它看起來很容易使用:下載,解壓縮並在包含所有罐子的目錄上運行該工具。或使用提供的Ant任務。)
Eclipse的最新版本將警告你在你的源代碼
如果你確實是在java源代碼文件中的import語句 - eclipse的警告很舊,而且是相反的 - 他正在尋找classpath條目沒有使用。 – 2009-11-19 14:59:45
這已經是Eclipse功能相當長的時間 – 2009-11-19 14:59:59
編譯器有一個-verbose
選項未使用的進口,這是相當冗長。它通知每個被加載的類以及它從哪裏加載!
雖然它不太方便用戶,並且不提供高級分析,但我發現它對於調試類路徑衝突非常有用。這會告訴你使用的罐子(在grep
的幫助下),而不是那些沒有使用的罐子。
- 1. 在Java編譯/構建項目時將jar複製到輸出文件夾
- 2. 如何在使用mvn命令編譯項目時添加jar文件
- 3. Eclipse - 如何找出你的項目實際使用哪些庫
- 4. 如何在Linux終端中用外部jar文件編譯java項目
- 5. 如何導出使用Gson jar的項目的jar文件
- 6. 如何使用批處理文件編譯java文件時包含jar文件
- 7. 僅在Gradle項目中編譯時風暴JAR編譯時間
- 8. 編譯java項目時出錯
- 9. 編譯Eclipse java applet和android項目時使用哪些文件?
- 10. 如何編譯黃瓜JVM項目爲.jar文件(S)
- 11. 如何用jar文件編譯java文件
- 12. 如何找出Java VM實際加載的信任庫文件?
- 13. 如何在您的項目中實現預編譯頭文件
- 14. Gradle在jar文件中編譯.java?
- 15. 我如何使Eclipse識別Java編譯器(1.6)和項目構面(1.6),實際上在GAE項目中匹配?
- 16. 如何在使用子文件夾的Eclipse中編譯項目?
- 17. 如何從Codenvy上的java項目導出JAR文件?
- 18. 編譯項目時出錯
- 19. 在Kotlin + Java項目中的Eclipse中編譯時出錯,但項目使用Maven編譯
- 20. 如何在eclipse/java/android中使用false @Override編譯java項目?
- 21. 如何使用Ant編譯和jar一個Android項目?
- 22. 構建Java Derby項目的jar文件時出錯
- 23. 使用.java文件編譯文件夾和Jar它
- 24. 編譯代碼時,JAVA無法在NetBeans項目和JAR文件上使用相同的資源
- 25. 如何配置Android Studio項目以使用實際源而不是反編譯?
- 26. 如何在Android NDK項目中使用預編譯頭文件?
- 27. 如何在Qt項目中使用預編譯頭文件
- 28. 如何編譯在BlueJ中使用.jar文件類的代碼?
- 29. 即使添加了jar文件後,仍無法編譯java項目?
- 30. 如何將Java項目導出爲jar文件
你會發現沒有人也涵蓋了運行時依賴關係。 – BalusC 2009-11-19 14:54:28
您甚至不會爲其他依賴項找到一個簡單的依賴項。歡迎來到classpath地獄;) – 2009-11-19 15:03:55
記錄:類依賴關係分析儀提供最詳細的輸出,一個很好的圖形用戶界面來檢查結果。然而,它很慢,記憶力很差。作爲構建作業的一部分,Jar分析器看起來更容易自動化,並生成大量有用的輸出。它也相當快。 – tomdee 2009-11-19 17:14:22