Maven строит проекты второго уровня + ребенка с использованием опции -pl

Моя структура проекта Maven, как показано ниже

Project A 
  pom.xml
  - ProjectB
    pom.xml
    - ProjectC
      pom.xml
    - ProjectD
      pom.xml
  - ProjectY
    pom.xml

Используя опции реактора Maven, я могу

clean install -pl projectB или clean install -pl projectY

Но при попытке построить дочерние модули второго уровня с помощью clean install -pl projectC, maven throws

org.apache.maven.MavenExecutionException: Could not find the selected project in the reactor: projectC

как собрать вторые дочерние модули level+, используя опции реактора maven

Ответ 1

В документации для параметра -pl указано следующее:

-pl,--projects <arg>                Comma-delimited list of specified
                                    reactor projects to build instead
                                    of all projects. A project can be
                                    specified by [groupId]:artifactId
                                    or by its relative path.

Важная часть для вас: "или по ее относительному пути".

Итак, чтобы построить projectC, вам просто нужно обратиться к нему по его относительному пути (projectB/projectC). Итак, вам нужна команда:

mvn clean install -pl projectB/projectC

Ответ 2

Это ответ на аналогичный вопрос, который также актуален здесь.
Используя artifactIds, вам не нужно знать структуру вашего проекта.


Если вы используете только artifactIds данного проекта, вы должны правильно определить это в командной строке:

справочный вывод Maven (mvn --help)

Разделенный запятыми список указанных проектов реактора для построения всех проекты. Проект может быть указан как [groupId]: artifactId или его относительный путь

Это означает, что в вашем случае вы должны определить:

mvn clean install --projects :projectC,:ProjectY

Обратите внимание на :, который стоит перед artifactIds, чтобы указать, что вы опускаете groupId

Ответ 3

На всякий случай, если у кого-то еще есть этот:

Я также столкнулся с этим сообщением об ошибке. Причина в том, что я случайно оказался в одном из моих (sub-) модулей на пути к терминалу.

Конечно, команда должна быть выполнена в корневой иерархии проекта. В соответствии с приведенным выше примером вы должны убедиться, что выполняете такую команду:

clean install -pl projectB
at Poject A

не например в ProjectY или где-то еще глубже в структуре проекта.

Правильно:

user:~/workspace/IdeaProjects/pojecta{master}$ clean install -pl projectB

Неправильно:

user:~/workspace/IdeaProjects/pojecta/projecty{master}$ clean install -pl projectB