【问题标题】:How to automatically reuse dependency versions in a multi-module Maven project?如何在多模块 Maven 项目中自动重用依赖版本?
【发布时间】: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-brokerguava 为例,但我的问题更笼统:如何自动将依赖版本从一个模块重用到另一个模块?

【问题讨论】:

  • 您是否尝试按照 pom.xml 中提供的方式设置 guava 依赖项?如果您使用 spring-boot-starter-activemq 作为编译(或运行时)并且 active-mq-broker 和 guava 都是其父级的编译/运行时依赖项,您应该能够通过定义所提供的依赖项来重用它们
  • 我也对答案感兴趣。我每次都是手动做的
  • 我知道 spring-boot-starter-activemq 依赖是为一个模块定义的,你想在父 pom 中添加 guava 依赖,对吧?因为如果你在简单的模块项目中工作,你不需要声明 guava 依赖,因为依赖是传递的。
  • @jaudo,是的,这是一个多模块项目,我已经更新了我的答案。
  • @Abaddon666 provided 定义为indicates you expect the JDK or a container to provide the dependency at runtime. 我在编译时需要这些库。

标签: java maven version dependency-management


【解决方案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。

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 2014-09-09
      • 2013-03-28
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多