有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在一个模块中,我使用依赖于spring-boot-starter-activemq:2.07.RELEASEactivemq-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也将使用此版本,因为依赖项中介的最近定义规则(请参见Introduction to the Dependency Mechanism

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

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


共 (2) 个答案

  1. # 1 楼答案

    在定义依赖关系的模块中

    activemq-broker:5.15.8
    

    此外,还可以定义并添加您喜欢使用的番石榴版本,而其他人可以继承其他版本的番石榴可能来自祖父母pom

  2. # 2 楼答案

    我将为我的项目定义一个parent,其中将处理依赖关系管理。(你可能已经有了这个)。在家长依赖关系管理部分,我将import依赖关系管理activemq-parent。这样,您就可以定义依赖项,而无需在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>
    

    如果您的父级没有从spring启动依赖项继承,那么您必须为activemq-parent编写特定的版本,而不是${activemq.version}

    在这之后在孩子身上

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

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