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



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

parent
|
-- project 1
|
-- project 2

project 1project 2具有大量的依赖关系,其中许多是彼此共同的。我想知道的是,我在互联网上找不到,如果有一个工具,我可以找到这些共同的依赖关系,这样我就可以把它们迁移到父pom?

例如,如果我给这个工具提供了两个元素为

的页面
... 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>
...

我不知道有什么工具可以像你描述的那样工作,但是有一个简单的解决方案:

创建一个临时的第三个项目,并将a和B的所有依赖项复制到这个项目中。然后尝试使用dependency:analyze-duplicate dependency-plugin目标查找副本,如下所示:

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。解析所有依赖项: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

相关内容

最新更新