1

我有 3 个存储库。其中一个是 parent-pom.xml,它是 A1 和 B1 存储库的父级。B1 存储库在依赖项中也有 A1 存储库。如果我在 parent-pom.xml 中更改版本,我还必须在 A1-pom.xml 和 B1-pom.xml 中手动更改它。它可以以某种方式自动化吗?

4

1 回答 1

1

正如您所说,父 pom 是解决方案。如果在父 pom 中声明,则不需要在子 pom 中声明依赖项会自动继承。声明父子pom.xml时有2个概念

  1. <dependencies>使用标记在父 pom.xml 中声明依赖项。

父 pom.xml

   ...
   <dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.2.2</version>
    </dependency>
   </dependencies>
   ...

子 pom.xml

...
<parent>
    <groupId>com.xyz.local.dependency</groupId>
    <artifactId>xyz-dm</artifactId>
    <version>1.0</version>
</parent>   
...

现在你不需要在你的子 pom.xml 中包含这个依赖,除非你想改变版本。但是使用的缺点是,无论子是否需要依赖,子 pom.xml 都会继承所有依赖。

  1. <dependencyManagement>使用标记在父 pom.xml 中声明依赖项。

父 pom.xml

   ...
   <dependencyManagement>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.2.2</version>
    </dependency>
   </dependencies>
   ...

子 pom.xml

...
<parent>
    <groupId>com.xyz.local.dependency</groupId>
    <artifactId>xyz-dm</artifactId>
    <version>1.0</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
</dependencies>
...

使用<dependencyManagement>标签,您实际上并没有在子模块中包含依赖项。如果需要,需要显式声明所需的依赖项。您无需提及将从父 pom.xml 获取的依赖项的版本。当你有一个共同的父 pom 声明所有依赖项时,此<dependencyManagement>标记将非常有用,所有子 pom.xml 将继承版本并声明它们真正需要的依赖项,而不是继承每个声明的依赖项。

要更清楚地了解<dependencies>and <dependencyManagement>,请参阅SO 答案

于 2021-06-30T07:27:50.410 回答