java - 清理 Maven 依赖管理

标签 java maven dependencies pom.xml

在一个大的 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/

相关文章:

java - Lucene中通过数字字段查找文档

maven - 将 Enunciate 与 Maven/多个模块一起使用

Gradle构建后Android Studio找不到库类

java - Java 为某个导入选择哪个 JAR?

android - 如何制作依赖于另一个应用程序的Android应用程序?

java - 如何在 OrientDB 中禁用自动类创建?

java - 当我将该字符串转换回 byte[] 时,两者并不相同。谁能帮我?

java - 无法从 jar 中给出的扩展 Activity 启动 Activity

java - 当代码具有不完整的 java doc 标记时,Maven 站点因 Java 8 而失败

java - 如何在框架内调整大小和绘制组件