我有 3 个存储库。其中一个是 parent-pom.xml,它是 A1 和 B1 存储库的父级。B1 存储库在依赖项中也有 A1 存储库。如果我在 parent-pom.xml 中更改版本,我还必须在 A1-pom.xml 和 B1-pom.xml 中手动更改它。它可以以某种方式自动化吗?
问问题
209 次
1 回答
1
正如您所说,父 pom 是解决方案。如果在父 pom 中声明,则不需要在子 pom 中声明依赖项会自动继承。声明父子pom.xml时有2个概念
<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 都会继承所有依赖。
<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 回答