繁体   English   中英

如何在多模块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 ,它依赖于guava:18.0

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

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

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

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

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

我会为我的项目定义一个父项 ,在那里将处理依赖项管理。(你可能已经有了这个)。 在父依赖关系管理部分,我将导入 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相同。 (因为那里定义了)

在模块中你是definign依赖

activemq-broker:5.15.8

也可以解决并添加你喜欢使用哪种版本的番石榴,而其他版本的番石榴可能来自祖父母pom。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM