Проблема с Maven Inforcer при работе с уровня реактора
Используемая версия Maven: 3.5.2, 3.5.3
mvn clean package -pl <root-artifact-id>:<module-name>
не говорит
[WARNING] Rule 3: org.apache.maven.plugins.enforcer.ReactorModuleConvergence failed with message:
Module parents have been found which could not be found in the reactor.
module: <artifact:id>:<module-name>:war:1.0-SNAPSHOT
Но работает нормально при запуске пакета mvn clean с уровня модуля. Это единственное предупреждающее сообщение в трассировке, приводящее к тому, что принудительному устройству не удается собрать пакет
0 ответов
Это очень старая ошибка, о которой сообщалось, но, похоже, никто ничего не делает с ней: https://issues.apache.org/jira/browse/MENFORCER-189
Основная причина может заключаться в том, что он сравнивает артефактид (имя-модуля) проекта, переданный в параметре -pl, с артефактидом (реактором) его родителя. Что никогда не будет прежним и, следовательно, всегда будет давать эту ошибку.
Для нас исправление заключалось в том, чтобы отключить плагин enforcer при использовании этого выполнения (другие исполнения без -pl, такие как "чистая установка", подходят)
mvn clean install
mvn package -pl module-name -Denforcer.skip=true
Изменить:
Другой вариант - указать проект реактора в сборке с помощью '.' (примечание: это также упакует реактор)
mnv clean package -pl .,module-name
Попробуйте включить --also-make
или -am
, например:
mvn -am -pl <root-artifact-id>:<module-name> clean package
Даже если модуль, который вы создаете, не зависит от другого модуля в сборке, запускается сборка Reactor, которая включает данный модуль и родительский POM вместе, и их связь затем может быть проверена Enforcer без пропуска. (В моем случае работает с Maven 3.6.2).