2012-08-28 68 views
2

一個項目正在使用各種庫。例如。 a.jarb.jarc.jard.jar
一些罐子已經被重構,現在是ab.jarcd.jar
我需要的是找到一個自動的方式這罐子在我安裝的是現在已經過時了,我可以將它們刪除。
這可能嗎?當你調用以命令行形式(或作爲Eclipse的一個VM選項)自動解決jar依賴項

-javaagent:loosejar.jar 

到你的java命令:

+1

http://code.google.com/p/loosejar/? –

+0

使用某種依賴關係管理系統 –

+0

@Jason Sperske,謹慎發表您的評論作爲答案? – aviad

回答

2

因此,與LooseJar可以通過增加檢測未使用的jar文件。我想這在技術上不是自動的,因爲在運行時動態加載類的代碼行需要被調用,以便LooseJar知道類和爲此需要的jar。一個好的方法可能是用這個Java代理調用你的單元測試(假設你的單元測試有很好的代碼覆蓋率)

+0

相關提示+1 – AlexR

2

最好的方法是使用maven。如果在maven中定義了依賴關係,您可以運行mvn dependency:tree來檢索所需的信息。詳情請參考article

如果你不使用maven,你可能不得不使用像jdepend這樣的工具。但要小心:這些工具不能真正檢索所有依賴關係。使用靜態分析僅通過反射調用對動態加載的類或API的依賴關係是不可能的。只有在運行應用程序時,才能實現完整的解決方案,使用所有可能的方案進行測試,並檢查類加載器加載了哪些類。如果您擁有100%的測試覆蓋率,則可以使用選項-verbose:class運行應用程序,然後針對您的應用程序運行所有單元測試。您將獲得所有加載的類的列表。現在把這個列表寫入文件並編寫shell腳本來分析類列表並將其轉換爲jar列表。