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