如何在多模块 Maven 项目中自动重用依赖版本?
How to automatically reuse dependency versions in a multi-module Maven project?
在一个模块中,我使用 spring-boot-starter-activemq:2.07.RELEASE
,它依赖于 activemq-broker:5.15.8
,而 activemq-broker:5.15.8
又依赖于 guava:18.0
。
在另一个模块中,我想使用番石榴,所以我必须使用:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
如果我在我的 pom.xml
中使用更高版本,由于最近的依赖调解定义规则(参见 Introduction to the Dependency Mechanism)
我不想提供与 activemq-broker
所要求的版本不同的 Guava 版本。所以为了同步版本,每次Spring Boot升级,我都需要手动检查版本才能同步。
我以 activemq-broker
和 guava
为例,但我的问题更笼统:How to automatically reuse a dependency version from a module into another?
在你定义依赖的模块中
activemq-broker:5.15.8
还 defibe 并添加你喜欢使用的任何版本的番石榴,而其他人可以继承其他版本的番石榴可能来自祖父母 pom。
我会定义一个parent for my project where dependency management will be handled.(You probably already have this). In the parents dependendency management section, I would import dependency management of activemq-parent。这样您就可以只定义依赖项,而无需在 child 中显示明确的版本。
您还可以使 parent 继承自 spring-boot-dependencies 以获取版本属性。 (在这个例子中 activemq.version 是从这里获取的)
示例:Parentpom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-parent</artifactId>
<version>${activemq.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
.....
</dependencyManagement>
如果您的 parent 没有继承自 spring-boot-dependencies,您必须为 activemq-parent
编写特定版本而不是 ${activemq.version}
在此之后 child
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
番石榴的版本将与 activemq-parent
相同。 (因为它在那里定义)
在一个模块中,我使用 spring-boot-starter-activemq:2.07.RELEASE
,它依赖于 activemq-broker:5.15.8
,而 activemq-broker:5.15.8
又依赖于 guava:18.0
。
在另一个模块中,我想使用番石榴,所以我必须使用:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
如果我在我的 pom.xml
中使用更高版本,由于最近的依赖调解定义规则(参见 Introduction to the Dependency Mechanism)
我不想提供与 activemq-broker
所要求的版本不同的 Guava 版本。所以为了同步版本,每次Spring Boot升级,我都需要手动检查版本才能同步。
我以 activemq-broker
和 guava
为例,但我的问题更笼统:How to automatically reuse a dependency version from a module into another?
在你定义依赖的模块中
activemq-broker:5.15.8
还 defibe 并添加你喜欢使用的任何版本的番石榴,而其他人可以继承其他版本的番石榴可能来自祖父母 pom。
我会定义一个parent for my project where dependency management will be handled.(You probably already have this). In the parents dependendency management section, I would import dependency management of activemq-parent。这样您就可以只定义依赖项,而无需在 child 中显示明确的版本。
您还可以使 parent 继承自 spring-boot-dependencies 以获取版本属性。 (在这个例子中 activemq.version 是从这里获取的)
示例:Parentpom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-parent</artifactId>
<version>${activemq.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
.....
</dependencyManagement>
如果您的 parent 没有继承自 spring-boot-dependencies,您必须为 activemq-parent
${activemq.version}
在此之后 child
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
番石榴的版本将与 activemq-parent
相同。 (因为它在那里定义)