如何避免兄弟子模块上的 Maven 版本?
How to avoid Maven Versions on Siblings Submodules?
我有一个 Maven 结构,例如:
- Parent
- Child 1
- Child 2
我已经定义了 Parent
<version>1.0-SNAPSHOT</version>
并留下 Child 1
和 Child 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 都可以处理。
我有一个 Maven 结构,例如:
- Parent
- Child 1
- Child 2
我已经定义了 Parent
<version>1.0-SNAPSHOT</version>
并留下 Child 1
和 Child 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 都可以处理。