2013-03-29 80 views
2

我的老闆喜歡在一個給定的Maven pom文件中的依賴項按照範圍,組和工件ID進行排序。如何輕鬆區分兩個Maven pom文件之間的依賴關係?

我最近繼承了相當數量的未被排序的依賴的相當數量的項目。所以我排序他們。

長話短說,我想確保我不會無意中刪除依賴項或將錯誤的排序依賴項複製到錯誤的pom中。

所以我想知道是否有某種機制或Maven報告插件,將不同的POM與以前的版本,並告訴我什麼依賴關係被添加或修改。

這樣的事情是否存在?

+0

任何SCM都有這個功能:「與以前的版本比較......」 – ben75

+0

是的。除了像我上面描述的那樣重新排列文本時,SCMs對於那些類型的東西來說非常棒。如果有這樣一個聰明的差異,這將是很酷的。 –

+0

Sorta。我希望採用更加自動化的方法。基本上,如果我做mvn依賴:樹,我必須爲舊版和新版都做,然後比較。這就是假設mvn依賴:樹具有一個獨立於pom本身順序的確定性順序。 –

回答

3

我喜歡用一個簡單的script獲得依賴的排序列表,然後將它們與像MELD一個difftool比較。

#!/bin/bash 
# first grab all dependencies 
mvn dependency:resolve >/dev/null 

# then list them with -o to keep noise low, 
# remove extra information and duplicates 
mvn -o dependency:list \ 
| grep ":.*:.*:.*" \ 
| cut -d] -f2- \ 
| sed 's/:[a-z]*$//g' \ 
| sort -u 
1

解決Maven依賴問題的最佳方式是下面的命令

mvn dependency:tree 
+2

爲了擴大這一點,我有一個類似的問題,我必須確保兩個項目具有相同的依賴關係。我發現最簡單的方法是運行: 'sdiff <(mvn dependency:tree -f〜/ projectOne/pom.xml)<(mvn dependency:tree -f〜/ projectTwo/pom.xml)更少' 並排,好看又容易閱讀,立即明白哪些依賴關係丟失並需要添加。 –

2

我發現最簡單的方法(我)要做到這一點是使用Eclipse的有效POM「視圖。

這是如何做到這一點

  1. 打開第一POM在Eclipse。
  2. 點擊那個pom的'Dependency Hierarchy'標籤。
  3. 在eclipse中打開第二個彈出窗口。
  4. 點擊那個pom的'Dependency Hierarchy'標籤。
  5. 將第二個pom窗口拖出eclipse以創建第二個eclipse窗口,以便您可以並排查看pom依賴關係。

希望這有助於:)

1

Maven插件 - version可能會解救您。

mvn versions:compare-dependencies -DremotePom=my.group:other-project:1.0-SNAPSHOT 

我喜歡簡化過濾,排序和打印嵌套多個模塊的唯一區別。要做到這一點使用:

mvn versions:compare-dependencies -DremotePom=my.group:other-project:1.0-SNAPSHOT | grep '\->' | sort | uniq 

希望你覺得它有用。