如何在多模块 Maven 项目中自动重用依赖版本?
Posted
技术标签:
【中文标题】如何在多模块 Maven 项目中自动重用依赖版本?【英文标题】:How to automatically reuse dependency versions in a multi-module Maven project? 【发布时间】:2019-05-19 17:35:26 【问题描述】:在一个模块中,我使用spring-boot-starter-activemq:2.07.RELEASE
,它依赖于activemq-broker:5.15.8
,它依赖于guava:18.0
。
在另一个模块中,我想使用guava,所以我必须使用:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
如果我在pom.xml
中使用更高版本,则activemq-broker
也将使用此版本,因为依赖中介的最近定义规则(请参阅Introduction to the Dependency Mechanism)
我不想提供与activemq-broker
所要求的不同版本的番石榴。所以为了同步版本,每次 Spring Boot 升级时,我都需要手动检查版本以便同步它们。
我以activemq-broker
和guava
为例,但我的问题更笼统:如何自动将依赖版本从一个模块重用到另一个模块?
【问题讨论】:
您是否尝试按照 pom.xml 中提供的方式设置 guava 依赖项?如果您使用 spring-boot-starter-activemq 作为编译(或运行时)并且 active-mq-broker 和 guava 都是其父级的编译/运行时依赖项,您应该能够通过定义所提供的依赖项来重用它们 我也对答案感兴趣。我每次都是手动做的 我知道 spring-boot-starter-activemq 依赖是为一个模块定义的,你想在父 pom 中添加 guava 依赖,对吧?因为如果你在简单的模块项目中工作,你不需要声明 guava 依赖,因为依赖是传递的。 @jaudo,是的,这是一个多模块项目,我已经更新了我的答案。 @Abaddon666provided
定义为indicates you expect the JDK or a container to provide the dependency at runtime.
我在编译时需要这些库。
【参考方案1】:
我会为我的项目定义一个parent 来处理依赖管理。(你可能已经有了这个)。在父母依赖管理部分,我将import activemq-parent 的依赖管理。这样,您可以只定义依赖项,而无需在子项中显式版本。
你也可以让你的父级继承 spring-boot-dependencies 来获取版本属性。 (在本例中,activemq.version 是从这里获取的)
示例:父 pom
<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>
如果您的父级没有从 spring-boot-dependencies 继承,则您必须为 activemq-parent
编写特定版本而不是 $activemq.version
在这个孩子之后
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
番石榴的版本将与activemq-parent
相同。 (因为它是在那里定义的)
【讨论】:
【参考方案2】:在你定义依赖的模块中
activemq-broker:5.15.8
还可以添加您喜欢使用的任何版本的番石榴,而其他可以继承其他版本的番石榴可能来自祖父母 pom。
【讨论】:
以上是关于如何在多模块 Maven 项目中自动重用依赖版本?的主要内容,如果未能解决你的问题,请参考以下文章
在多模块 maven 项目中的模块之间共享 src/test 类
在多模块 Maven 项目中构建所有模块后,如何运行集成测试?