Java 如何在多模块Maven项目中自动重用依赖项版本?

Java 如何在多模块Maven项目中自动重用依赖项版本?,java,maven,version,dependency-management,Java,Maven,Version,Dependency Management,在一个模块中,我使用了springbootstarteractivemq:2.07.RELEASE,它依赖于activemq代理:5.15.8,它依赖于guava:18.0 在另一个模块中,我想使用番石榴,因此我必须使用: <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0<

在一个模块中,我使用了
springbootstarteractivemq:2.07.RELEASE
,它依赖于
activemq代理:5.15.8
,它依赖于
guava:18.0

在另一个模块中,我想使用番石榴,因此我必须使用:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>18.0</version>
</dependency>

番石榴
)

我不想提供与
activemq broker
要求的不同版本的番石榴。所以为了同步版本,每次有Spring引导升级,我需要手动检查版本以同步它们


我以
activemq broker
guava
为例,但我的问题更一般:如何将依赖项版本从一个模块自动重用到另一个模块?

在定义依赖项的模块中

activemq-broker:5.15.8
另外,请定义并添加您喜欢使用的番石榴的任何版本,而其他人可以继承其他版本的番石榴可能来自祖父母pom。

我会为我的项目定义一个将处理依赖关系管理的版本。(您可能已经有了这个)。在“家长依赖关系管理”部分,我将介绍的依赖关系管理。通过这种方式,您可以只定义依赖项,而不在child中定义显式版本

您还可以让您的父级从spring引导依赖项继承以获取版本属性。(在本例中,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>

番石榴的版本将与activemq父版本相同。(因为它是在那里定义的)

您是否尝试按照pom.xml中提供的设置番石榴依赖项?如果您使用spring boot starter activemq作为编译(或运行时),并且active mq broker和guava都是其父代的编译/运行时依赖项,那么您应该能够通过定义提供的依赖项来重用它们。我也对答案感兴趣。每次我了解到spring boot starter activemq依赖项是为一个模块定义的,并且您希望将guava依赖项添加到父pom时,我都会手动执行此操作,对吗?因为如果您在简单模块项目中工作,您不需要声明guava依赖项,因为依赖项是可传递的。@jaudo,是的,它是一个多模块项目,我已经更新了我的答案。@Abaddon666
provided
定义为
表示您希望JDK或容器在运行时提供依赖关系。
我在编译时需要这些库。
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
</dependency>