在一个大的 Maven 2 项目中,有依赖管理来确保在整个系统中只使用一个依赖版本是很好的。这使系统保持一致。
但是当我生成有效的 POM 时,我没有机会看到依赖版本来自哪里。同样,在层次结构顶部的 POM 中,我不知道在子 POM 中的何处真正使用了依赖管理部分的定义版本。
那么我该如何清理依赖管理呢?当我删除一个项目中的依赖项时,如果仍然需要它,我总是会检查所有其他项目,这样我也可以从顶部的依赖项管理中删除?
此外,我如何建立依赖管理,确保它不会在子 POM 的某处重复?当我添加依赖项时,我总是检查所有其他项目,看看它是否可以在依赖项管理中聚合到顶部?或者您是否总是将所有依赖项版本从一开始就移到顶部,以便它们始终只在一个地方?
感谢您的任何想法。
最佳答案
您可以为您的项目创建一个或多个 boms( Material list )。这些 pom.xml 将在 dependencyManagement
部分中声明项目中使用的所有依赖项。
在每个子 pom 中,您将导入这些 boms 并使用项目所需的那些依赖项。
这样,依赖版本集中管理,同时每个子pom只使用它需要的那些依赖。
参见 Importing Managed Dependencies
BOM项目
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>my.group</groupId>
<artifactId>My-Project-Bom</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.7.0</version>
</dependency>
...
</dependencies>
</dependencyManagement>
</project>
子项目
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>my.group</groupId>
<artifactId>child1</artifactId>
<packaging>jar</packaging>
<name>Child1</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>My-Project-BOM</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
</dependencies>
...
</project>
maven dependency plugin有几个目标可以帮助您获得依赖关系层次结构。
mvn dependency:list
mvn dependency:tree
mvn dependency:analyze
关于java - 清理 Maven 依赖管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281422/