Я также заинтересован в применении исключения к субмодулям.Однако mvn clean install -pl Parent2 -amd
работает как и ожидалось, применяя clean
& install
в Parent2
, Project2
& Project3
.Однако, как указано Pawl 's комментарий и в соответствии с MNG-5230 выпуск
Вложенные модули не исключаются родительскиммодуль.Метод исключения имитирует метод включения, а его сопоставление не поддерживает подстановочные знаки и т. Д. Поэтому для каскадного исключения потребуется дополнительный флаг, такой как -amd
.
Граф зависимостей фильтруется в следующем порядке при использовании -pl:
1. включенные проекты + возможно вверх и вниз по течению
2. исключенные проекты
3. пропуск для проектов возобновления
Таким образом, должна быть возможность прямого исключения вложенных модулей, поскольку они должны присутствовать вграфик зависимостей до начала фильтрации.
Поэтому исключение вложенных модулей с использованием их родителя / держателя pom
невозможно.Вот как я решил эту проблему.Простое использование профилей и полное удаление субмодулей вне определения профилей решило эту проблему.
Вкратце использует профили для идентификации модулей, отмечая, что модули, идентифицированные вне профилей, являются общими независимо от того, какой профиль активирован
Пример сПосле присвоения имен проектам
Parent1 (добавлено Project4
, как и Project1
только для пояснения)
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Parent1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<profiles>
<profile>
<id>multi-modules-profile</id>
<modules>
<module>Parent2</module>
<module>Project2</module>
<module>Project3</module>
</modules>
</profile>
<profile>
<id>simple-module-profile</id>
<modules>
<module>Project1</module>
</modules>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<modules>
<module>Project4</module>
</modules>
Project1 (&Project4
аналогично)
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>Parent1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Project1</artifactId>
Parent2
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>Parent1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Parent2</artifactId>
<packaging>pom</packaging>
Project2 (& Project3
аналогично)
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>Parent2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../Parent2</relativePath>
</parent>
<artifactId>Project2</artifactId>
Теперь запущенный mvn clean
будет применяться к Parent1
, Project1
& Project4
, поскольку Project1
находится в профиле, который активирован по умолчанию (без указания профиля во время выполнения).Это имеет тот же эффект при выполнении mvn clean -P simple-module-profile
, потому что Project4
является общим определением профилей.
Наконец, выполнение mvn clean -P multi-modules-profile
будет применено к Parent1
, Project4
, Parent2
, Project2
&Project3
оставляя Project1
, что желательно.Обратите внимание, что Project4
всегда включен, потому что это определения внешних профилей.