Java 如何避免同级子模块上的Maven版本?

Java 如何避免同级子模块上的Maven版本?,java,maven,maven-3,Java,Maven,Maven 3,我有一个Maven结构,例如: - Parent - Child 1 - Child 2 我已经定义了父项1.0-SNAPSHOT并将子项1和子项2保留为无版本,这样两个子项将自动继承父项版本 问题是,我需要引用Child 1作为Child 2的依赖项,唯一的方法是传递Child 1版本,例如: <dependency> <groupId>com.myapp</groupId> <artifactId>child-1<

我有一个Maven结构,例如:

- Parent
  - Child 1
  - Child 2
我已经定义了
父项
1.0-SNAPSHOT
并将
子项1
子项2
保留为无版本,这样两个子项将自动继承
父项
版本

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

<dependency>
    <groupId>com.myapp</groupId>
    <artifactId>child-1</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
有没有办法避免在
Child 2
POM上引用
Child 1
verion?

自动获取此信息将大大减少出错的可能性。

当然,您可以这样做

父级
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>
<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>
<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>
子2
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>
<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>
<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>

com.acme
根
1.0.0-SNAPSHOT
儿童-2
儿童2
com.acme
儿童-1

子版本中的显式父版本不是问题,因为
mvn版本:set
和Maven Release插件都可以处理这个问题。

不确定您是否可以。你想避免什么问题?mvn发布插件将负责更新子模块的所有版本,包括那些在其他子模块中也作为依赖项引用的版本。所以这部分肯定不容易出错。我想避免忘记更新Child1版本,在Child2POM中。。。。。对于你刚才所说的,那么这将永远不会是一个问题?如果我在Child 2 POM中将Child 1版本定义为1.0。。。然后我将父版本修改为2.0,我忘了在Child 2 POM中将Child 1更新为2.0,Maven将忽略POM上的1.0版本,而使用2.0?@DB5您提到的是发布的答案中的内容?有趣。。。Maven 3.3.9中提供了
${project.version}
?因为这是IntelliJ IDEA附带的版本(他们从不更新,我不知道为什么),是的,这是一个。