2009-05-18 51 views
21

有沒有人有代碼來檢測類路徑中的重複JAR?如何檢測類路徑中的重複JAR?

背景:當類路徑中存在兩個相同JAR版本時,可能會發生奇怪的事情。使用像Maven這樣的工具時甚至會發生這種情況:更改依賴關係並首先構建WAR而不進行清理。由於target/webapp/WEB-INF/lib未被清理,依賴關係將在那裏兩次。

有沒有安全網?

+1

驗證這是否可以幫助您: http:// stackoverflow。com/questions/17555928/remove-duplicate-jars-in-a-directroy/20611435#20611435 – 2013-12-16 13:16:59

回答

22

JBoss Tattletale可能會幫助你。

這是一個免費的工具,它可以掃描項目使用的JAR文件併爲您提供關於它們的報告。

當中它的特點是:

  • 現貨,如果一個類位於多個JAR文件
  • 現貨,如果同一個JAR文件位於多個位置
  • 查找有不同的版本類似的JAR文件數字
1

我認爲最簡單的方法是簡單地首先垃圾目標目錄。希望將所有.jar文件複製到其中並不會很費時。

否則,你將不得不以某種方式比較可觀的文件(無論是直接的,通過計算校驗和或類似的)。這聽起來不太好聽。

-2

您可以編寫一個簡單的腳本,將每個jar文件的md5總和與其他jar文件進行比較,並沿途刪除重複項。

+2

兩個版本意思是說md5的總和不匹配:-) – 2009-05-18 14:27:59

+0

啊對不起,錯過了你的問題的不同版本部分 – neesh 2009-05-18 14:32:48

2

System.getProperty("java.class.path"),分割它,對它進行分類,用人眼看它 :-)。

它將不包括其他罐子你:-(裏面體現派生類路徑

或者使用http://www.jboss.org/tattletale作爲海報的一個建議

4

有一個Maven插件來做到這一點:。maven-duplicate-finder-plugin

[編輯]如果你想這樣做單元測試自己,用

getClass().getClassLoader().getResources("com/pany/package/Java.class") 

如果返回多個URL,則類路徑上有重複項。

缺點是,這隻適用於過去有衝突的情況。從積極的方面來說,它只是幾行代碼(或者當你編寫一個輔助方法的時候是一行代碼),它可以在你的構建服務器上運行。