Начиная с Maven 3.5.0-beta, есть поле revision
, используемое для управления многомодульными проектами.
https://maven.apache.org/maven-ci-friendly.html
Тебе нужен родитель pom.xml
, чтобы выглядеть как
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
</parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${revision}</version>
...
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
</project>
И тогда ваш подмодуль A (ребенок) будет выглядеть как
<project>
<modelVersion>...</modelVersion>
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<!-- Make sure you have maven 3.6.0 at least for this to work -->
<version>${revision}</version>
</parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<!-- Don't put version, it's taken from the parent -->
...
</project>
И, наконец, ваш модуль B выглядит следующим образом
<project>
<modelVersion>...</modelVersion>
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${revision}</version>
</parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
...
<dependency>
<groupId>...</groupId>
<artifactId>module-A</artifactId>
<version>${project.version}</version>
</dependency>
...
</project>
Ваш модуль C, скорее всего, будет выглядеть как модуль A, но без каких-либо зависимостей
Это должно заставить ваш пом работать локально. Если вам нужно развернуть их, вам также нужно добавить плагин flatten
, который возьмет ваш pom.xml
и заменит переменные revision
на актуальную версию вашего проекта.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Вы также должны иметь возможность создавать свои проекты независимо, используя mvn clean package -pl module-A
, хотя я бы порекомендовал вам строить A и B одновременно, по крайней мере.