Java 如何避免同级子模块上的Maven版本?
我有一个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<
- 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>
子2pom.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附带的版本(他们从不更新,我不知道为什么),是的,这是一个。