Сборка дочернего модуля без построения родительского модуля, когда версия всех модулей определяется одним свойством
У меня есть многомодульный проект с иерархией ниже:
parent-build
проект pom.xml
...
<groupId>com.my.project</groupId>
<artifactId>parent-build</artifactId>
<packaging>pom</packaging>
<name>parent-build</name>
<version>${version.product}</version>
<properties>
<version.product>1.0</version.product>
</properties>
...
build-all
проект pom.xml
...
<parent>
<artifactId>parent-build</artifactId>
<groupId>com.my.project</groupId>
<version>${version.product}</version>
<relativePath>../parent-build/pom.xml</relativePath>
</parent>
<groupId>com.my.project</groupId>
<packaging>pom</packaging>
<modules>
<module>../child-1</module>
<module>../child-2</module>
</modules>
...
child-2
проект pom.xml
...
<parent>
<artifactId>parent-build</artifactId>
<groupId>com.my.project</groupId>
<version>${version.product}</version>
<relativePath>../parent-build/pom.xml</relativePath>
</parent>
<groupId>com.my.project</groupId>
<artifactId>child-2</artifactId>
<packaging>jar</packaging>
<version>${version.product}</version>
...
<dependencies>
<dependency>
<groupId>com.my.project</groupId>
<artifactId>child-1</artifactId>
<version>${version.product}</version>
</dependency>
...
</dependencies>
...
child-1
проект pom.xml
...
<parent>
<artifactId>parent-build</artifactId>
<groupId>com.my.project</groupId>
<version>${version.product}</version>
<relativePath>../parent-build/pom.xml</relativePath>
</parent>
<groupId>com.my.project</groupId>
<artifactId>child-1</artifactId>
<packaging>jar</packaging>
<version>${version.product}</version>
...
Я хочу собрать все банки с одинаковой версией, и эта версия должна быть указана в одном месте. Я объявил свойство в родительской сборке pom.xml
Теперь, когда я делаю mvn clean install
в проекте build-all он строит все проекты в указанном порядке модулей. Это хорошо.
Но в некоторых случаях я хочу построить child-2
только проект.
скажем, я делаю некоторые изменения в проекте child-2 и хочу построить только этот проект. Проблема этого сценария в том, что он не может найти значение свойства version.product
Редактировать:
Ниже приведена ошибка, которую я получаю при создании проекта child-2
Could not transfer artifact com.my.project:parent-build:pom:${version.product} from/to central (http://repo1.maven.org/maven2): Illegal character in path at index 66: http://repo1.maven.org/maven2/com/my/project/parent-build/${version.product}/parent-build-${version.product}.pom
Пожалуйста помоги.
Заранее спасибо.
2 ответа
Это то, что я хочу.
Этот плагин заменит вашу версию, указанную в свойстве, фактическим значением свойства во всех действующих pom.xml.
Поэтому позже, если вы построите любого ребенка отдельно, он будет успешно построен.
ура
Во-первых, я бы настаивал на этом, но я знаю, что у вас может быть модуль, который еще не работает должным образом и т. Д. В прошлом я использовал профили в родительском pom для управления списком модулей:
<profiles>
<profile>
<id>all</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>1</module>
<module>2</module>
<module>3</module>
<module>4</module>
</modules>
</profile>
<profile>
<id>profile1</id>
<modules>
<module>1</module>
<module>2</module>
<module>3</module>
</modules>
</profile>
</profiles>
тогда для:
1) mvn clean install - вы получите все модули
2) mvn clean install -Pprofile1, вы получите только модули 1,2 и 3.