У нас есть проект Maven 2 с большим количеством модулей. Пример:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Допустим, создание модуля «данных» занимает много времени, и мы хотим исключить его, когда проект создается сервером CI. В настоящее время для этого мы используем два файла pom.xml. В одном есть все модули, а в другом - все модули, кроме тех, которые можно не использовать для CI. Но это довольно неприятно, потому что иногда мы забываем поместить новый модуль в оба файла.
Есть ли решение, которое не требует двух отдельных списков модулей?
С Maven 3.2.1 теперь вы можете использовать
-pl !<module_name>,!<module_name>
для исключения определенных модулей из сборки реактора.См. Этот запрос функции: https://issues.apache.org/jira/browse/MNG-5230
источник
-
вместо!
, т.е.-pl -<module_name>
Проекты для сборки также можно указать в командной строке mvn. Это устранит необходимость в отдельном помпе, но вместо этого вам придется изменять конфигурацию CI каждый раз, когда появляется новый модуль.
Возможно, сочетание этого флага и /
--also-make-dependents
или--also-make
снова уменьшит эту нагрузку на обслуживание.источник
mvn clean install -pl mysubproject
Я предполагаю, что вы хотите, чтобы стандартная сборка всегда создавала все, независимо от скорости, чтобы новые разработчики могли быстро начать работу, не разбираясь в POM. Вы можете использовать такие профили:
Проблема в том, что если разработчик указывает другой профиль в командной строке, он
expensive-modules-to-build
не включается (если разработчик также не указывает его). Из-за этого сложно запомнить, какие профили необходимо включить.Вот способ обойти это. Оба профиля всегда включены, потому что файл pom.xml существует всегда. Таким образом, чтобы исключить дорогостоящие модули, вы можете использовать их
-P!full-build
в командной строке.источник
-pl !<module_name>,!<module_name>
лучше, чем этот старыйЕще одна идея: модули Reactor могут быть вложенными, поэтому должна быть возможность сгруппировать ваши быстрые и медленные модули в отдельные помы, а затем добавить другой помп агрегатора, содержащий эти два как модули. Тогда ваш CI-сервер мог ссылаться только на pom, содержащий модули быстрой сборки.
источник
Вы можете использовать профили maven . В нашей среде сборки мы создали профиль,
quick
который отключает многие плагины и выполнение тестов.Это делается
Затем мы вызываем maven следующим образом
Возможно, вы можете отключить компиляцию и другие стандартные плагины в pom вашего модуля, чтобы ускорить его.
источник
Не совсем тот ответ, которого просили эти люди. Моя ситуация заключалась в том, что я хотел развернуть только родительский пом. Я использую
spring-boot-thin-layout
в дочернем модуле. Для этого требуется, чтобы родительский модуль был развернут в артефакте. Я добавил в свой проект следующее. Это позволяет пропускатьinstall
и / илиdeploy
фазу.В моем родительском помпе:
И в моем дочернем pom (s) или любом модуле, который вы не хотите развертывать с родительским:
Так эффективно, когда я запускаю
mvn deploy
родительский pom, он компилирует все модули, а не запускает установку на что-либо, а затем в конце развертывает любой модуль, не имеющий<maven.deploy.skip>${disable.deploy}</maven.deploy.skip>
в нем свойств. Итак, в моем случае развертывание только родителя.источник