用于在Maven中查找兄弟模块之间的公共依赖关系的工具?

时间:2013-05-10 15:22:56

标签: maven dependencies

我必须创建一个新的maven项目,将旧项目迁移到maven。所以我得到了这样的结构

parent
|
\-- project 1
|
\-- project 2

project 1project 2有很多依赖关系,其中很多都是相同的。我想知道,我在互联网上找不到,是否有一个工具,我可以找到这些常见的依赖项,所以我可以将它们迁移到父pom?

例如,如果我向这个工具提供两个带有

等元素的poms
... PROJECT 1 POM
<dependencies>
   <dependency>
       <groupId>com.foo</groupId>
       <artifcatId>A</artifactId>
       <version>1.0.0</artifactId>
   </dependency>
   <dependency>
       <groupId>com.foo</groupId>
       <artifcatId>B</artifactId>
       <version>1.0.0</artifactId>
   </dependency>
</dependencies>
...

.. PROJECT 2 POM
<dependencies>
   <dependency>
       <groupId>com.foo</groupId>
       <artifcatId>B</artifactId>
       <version>1.0.0</artifactId>
   </dependency>
   <dependency>
       <groupId>com.foo</groupId>
       <artifcatId>C</artifactId>
       <version>1.0.0</artifactId>
   </dependency>
</dependencies>
...

我希望输出为

.. OUTPUT FROM COMPARING BOTH
<dependencies>
   <dependency>
       <groupId>com.foo</groupId>
       <artifcatId>B</artifactId>
       <version>1.0.0</artifactId>
   </dependency>
</dependencies>
...

2 个答案:

答案 0 :(得分:3)

我不知道一个像你描述的那样工作的工具,但有一个简单的解决方法:

创建一个临时的第三个项目,并将所有依赖项从A和B复制到此pom。然后尝试查找具有dependency:analyze-duplicate依赖项插件目标的重复项,如下所示:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:analyze-duplicate

你会得到这样的东西

[INFO] ------------------------------------------------------------------------
[INFO] Building foobar 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:analyze-duplicate (default-cli) @ foobar ---
[INFO] List of duplicate dependencies defined in <dependencies/> in your pom.xml:
        o junit:junit:jar

为了确保副本真的来自两个项目,您应该重复检查之前的单个项目。

答案 1 :(得分:1)

我不知道有任何工具可以做..但你可以在旧学校做到这一点

1.解决所有依赖关系:mvn dependency:resolve

2.列出所有已排序的依赖关系,而不是按模块重复...并检查模块:

mvn -o dependency:list | grep ":.*:.*:.*" | cut -d] -f2- | sed 's/:[a-z]*$//g' | sort -u

3.然后你可以在所有模块中寻找

mvn dependency:tree -Dverbose -Dincludes=commons-collections --> for example