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

Ort*_*kni 5 java version dependency-management maven

在一个模块中,我使用spring-boot-starter-activemq:2.07.RELEASE哪个依赖于activemq-broker:5.15.8哪个模块guava:18.0.

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

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>18.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果我在我的版本中使用更高版本,pom.xmlactivemq-broker由于依赖关系中介的最近定义规则也会使用它(请参阅依赖关系机制简介)

我不想提供不同版本的番石榴activemq-broker.因此,为了同步版本,每次有Spring Boot升级时,我都需要手动检查版本以便同步它们.

我使用activemq-brokerguava作为示例,但我的问题更一般:如何自动重用从一个模块到另一个模块的依赖版本?

mis*_*der 2

我会为我的项目定义一个项目,其中将处理依赖关系管理。(您可能已经有了这个)。在父母依赖管理部分,我将导入activemq-parent的依赖管理。这样您就可以只定义依赖项,而无需在子项中显式版本。

您还可以让您的父级继承 spring-boot-dependency 以获取版本属性。(在此示例中,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>
Run Code Online (Sandbox Code Playgroud)

如果您的父级不继承 spring-boot-dependency,您将不得不编写特定版本而不是${activemq.version}foractivemq-parent

在孩子这之后

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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