Исключить родительский элемент и его дочерние элементы или модули в команде maven, выполняющей жизненный цикл - PullRequest
0 голосов
/ 23 января 2019

Выполнение mvn clean install -pl !Parent2 делает НЕ применение жизненных циклов к Parent2 ни детям, ни модулям.Хотя все подпроекты находятся на одном уровне, я пытаюсь объединить Project2 & Project2 в одного родителя Parent2, чтобы исключить его только из многих жизненных циклов. Как это можно сделать?

Аналогично mvn clean install -pl Parent2 применяется только к Parent2 без дочерних элементов / модулей !!

enter image description here

Вот последние POM, которые я достиг в структуре.Отмечу, что мое единственное ограничение - хранить папки всех на одном уровне (ниже Parent1)

Parent1

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>any</groupId>
    <artifactId>Parent1</artifactId>
    <version>whatever</version>
    <packaging>pom</packaging>
<modules>
    <module>Parent2</module>
    <module>Project1</module>
</modules>
</project>

Parent2

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>any</groupId>
        <artifactId>Parent1</artifactId>
        <version>whatever</version>
    </parent>

    <packaging>pom</packaging>
    <artifactId>Parent2</artifactId>
<modules>
    <module>../Project2</module>
    <module>../Project3</module>
</modules>
</project>

Project1

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>any</groupId>
        <artifactId>Parent1</artifactId>
        <version>whatever</version>
    </parent>

    <packaging>jar</packaging>
    <artifactId>Project1</artifactId>
</project>

Project2 (Project3 точно такой же)

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>any</groupId>
        <artifactId>Parent2</artifactId>
        <version>whatever</version>
        <relativePath>../Parent2</relativePath>
    </parent>

    <packaging>jar</packaging>
    <artifactId>Project2</artifactId>
</project>

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я также заинтересован в применении исключения к субмодулям.Однако 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 всегда включен, потому что это определения внешних профилей.

0 голосов
/ 23 января 2019

РЕДАКТИРОВАТЬ: ответ относится только к:

Аналогично, mvn clean install -pl Parent2 применяется только к Parent2 без дочерних / модулей !!

Используйте mvn -pl Parent2 -amd clean install для сборки Parent2 и всех его модулей.

См. Ссылку: https://books.sonatype.com/mvnref-book/reference/_using_advanced_reactor_options.html#_making_project_dependents

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...