清理Maven依赖管理

ans*_*elm 11 java dependencies pom.xml maven

在一个大的Maven 2项目中,让依赖关系管理确保在整个系统中只使用一个依赖项版本是很好的.这使得系统保持一致.

但是当我生成有效的POM时,我没有机会看到依赖版本的来源.同样,在层次结构顶部的POM中,我不知道在子POM中确实使用了依赖关系管理部分的定义版本.

那么如何清理依赖关系管理呢?当我删除一个项目中的依赖项时,我总是检查所有其他项目是否仍然需要它,以便我也可以从顶部的依赖项管理中删除?

另外,如何构建依赖关系管理,确保它不会在子POM中的某处复制?当我添加依赖项时,我总是检查所有其他项目,看它是否可能在依赖项管理中聚合在一起?或者你是否总是将所有依赖版本从头开始移动到顶部,这样它们总是只在一个地方?

谢谢你的任何想法.

Rag*_*ram 9

您可以为项目创建一个或多个boms(物料清单).这些pom.xmls将在dependencyManagement部分中声明项目中使用的所有依赖项.

在每个子pom中,您将导入这些boms并使用项目所需的那些依赖项.

通过这种方式,依赖版本可以集中管理,同时,每个子pom只使用它需要的依赖项.

请参阅导入托管依赖项

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>
Run Code Online (Sandbox Code Playgroud)

儿童项目

<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>
Run Code Online (Sandbox Code Playgroud)

maven依赖插件有一些目标可以帮助您获得依赖层次结构.

mvn dependency:list
mvn dependency:tree
mvn dependency:analyze
Run Code Online (Sandbox Code Playgroud)


Dón*_*yle 2

如果您使用的是 eclipse,m2eclipe插件允许您查看 pom.xml 的依赖关系层次结构。当尝试确定将依赖项引入到项目中的位置以及发生冲突的位置时,这非常有用。