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

时间:2018-12-19 08:54:27

标签: java maven version dependency-management

在一个模块中,我使用取决于spring-boot-starter-activemq:2.07.RELEASEactivemq-broker:5.15.8的{​​{1}}。

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

guava:18.0

如果我在<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency> 中使用更高版本,则pom.xml也将使用该版本,因为依赖中介的定义规则最近(请参见Introduction to the Dependency Mechanism

我不想提供与activemq-broker要求的版本不同的Guava版本。因此,为了同步版本,每次进行Spring Boot升级时,我都需要手动检查版本以使其同步。

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

2 个答案:

答案 0 :(得分:2)

我将为我的项目定义一个parent,将在其中处理依赖项管理。(您可能已经拥有了)。在父母依赖性管理部分,我将importactivemq-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.version}写特定版本而不是activemq-parent

在孩子之后

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

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

答案 1 :(得分:-1)

在您具有明确依赖关系的模块中

activemq-broker:5.15.8

还取消定义并添加您要使用的任何版本的番石榴,而其他人可以继承其他版本的番石榴可能来自祖父母pom。