如何避免兄弟子模块上的 Maven 版本?

How to avoid Maven Versions on Siblings Submodules?

我有一个 Maven 结构,例如:

- Parent
  - Child 1
  - Child 2

我已经定义了 Parent <version>1.0-SNAPSHOT</version> 并留下 Child 1Child 2 没有版本,这样 children 都将继承 Parent 自动版本。

问题是,我需要引用 Child 1 作为对 Child 2 的依赖,唯一的方法是传递 Child 1 版本,例如:

<dependency>
    <groupId>com.myapp</groupId>
    <artifactId>child-1</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

我想避免这种情况,因为无论如何 children 都会继承 Parent 版本,但我不能将 Child 1 包括为:

<dependency>
    <groupId>com.myapp</groupId>
    <artifactId>child-1</artifactId>
</dependency>

有没有办法避免在 Child 2 POM 上引用 Child 1 版本?

自动获取这个会少很多error-prone.

当然可以。

Parent pom.xml:

<groupId>com.acme</groupId>
<artifactId>root</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>child-1</module>
    <module>child-2</module>
</modules>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.acme</groupId>
            <artifactId>child-1</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.acme</groupId>
            <artifactId>child-2</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
<dependencyManagement>

然后只引用没有版本的兄弟姐妹:

Child 1 pom.xml:

<parent>
    <groupId>com.acme</groupId>
    <artifactId>root</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<artifactId>child-1</artifactId>
<name>Child 1</name>

<dependencies>
    <dependency>
        <groupId>com.acme</groupId>
        <artifactId>child-2</artifactId>
    </dependency>
</dependencies>

Child 2 pom.xml:

<parent>
    <groupId>com.acme</groupId>
    <artifactId>root</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<artifactId>child-2</artifactId>
<name>Child 2</name>

<dependencies>
    <dependency>
        <groupId>com.acme</groupId>
        <artifactId>child-1</artifactId>
    </dependency>
</dependencies>

children 中的显式 parent 版本不是问题,因为 mvn versions:set 和 Maven Release Plugin 都可以处理。