Нам нужно пропустить подмодуль в определенных средах.
Данный модуль содержит интеграционные тесты и занимает полчаса. Поэтому мы хотим включить его при сборке на сервере CI, но когда разработчики собирают локально (и тесты запускаются), мы хотим пропустить этот модуль.
Есть ли способ сделать это с помощью настройки профиля? Я немного погуглил, посмотрел другие вопросы / ответы здесь и не нашел хорошего решения.
Я полагаю, что один из вариантов - полностью удалить этот подмодуль из родительского pom.xml
модуля и просто добавить другой проект на наш CI-сервер, чтобы просто построить этот модуль.
Предложения?
maven
continuous-integration
jenkins
denishaskin
источник
источник
Ответы:
Конечно, это можно сделать с помощью профилей. Вы можете сделать что-то вроде следующего в вашем родительском pom.xml.
В вашем CI вы запускаете maven с
ci
профилем, т.е.mvn -P ci clean install
источник
activeByDefault
в этот профиль, а затем мне пришлось добавить еще один пустой профиль (напримерskip-integration-tests
), чтобы можно было их пропустить.Maven версии 3.2.1 добавил эту функцию, вы можете использовать
-pl
переключатель ( ярлык для--projects
списка) с!
или-
( источник ), чтобы исключить определенные подмодули.Будьте осторожны с персонажем! это специальный символ, поэтому вы должны либо заключить его в одинарные кавычки (как я), либо экранировать его символом обратной косой черты.
Синтаксис для исключения нескольких модулей такой же, как включение
ПРАВКА Windows, кажется, не любит одинарные кавычки, но это необходимо в bash; в Windows используйте двойные кавычки (спасибо @awilkinson)
источник
mvn -pl !com.acme:nestedmodule1
mvn -pl '!path/to/submodule/directory'
, не используя groupId и artifactId. Мой ответ работает, еслиsubmodule1
иsubmodule2
находятся в текущем каталоге.-pl
вmvn install
, вы , вероятно , нужно использовать его дляmvn deploy
аМожно решить, какие реакторные проекты построить, указав
-pl
аргумент командной строки:Он принимает список параметров через запятую в одной из следующих форм:
[groupId]:artifactId
Таким образом, дана следующая структура:
Вы можете указать следующую командную строку:
строить все. Удалите элементы в списке, чтобы строить только те модули, которые вам нравятся.
РЕДАКТИРОВАТЬ: как указало blackbuild , с Maven 3.2.1 у вас есть новый
-el
флаг, который исключает проекты из реактора, аналогично тому, что-pl
делает:источник
mvn install -pl .
для того, чтобы установить родительский pom только в локальном репо без сборки модулей.Идея многомодульных проектов предназначена для обслуживания потребностей зависимых сегментов проекта. Такой клиент зависит от сервисов, которые, в свою очередь, зависят, скажем, от EJB или процедур доступа к данным. Вы можете сгруппировать свои тесты непрерывной интеграции (CI) таким образом. Я бы рационализировал это, сказав, что тесты CI должны идти в ногу с изменениями логики приложения.
Предположим, ваш проект структурирован как:
В
project-root/pom.xml
определяет модулиВ
ci/pom.xml
определяет профили , такие как:Это приведет к пропуску тестов Maven в этом модуле, кроме случаев, когда указанный профиль
CI
активен. Ваш CI сервер должен быть проинструктирован для выполненияmvn clean package -P CI
. Веб-сайт Maven содержит подробное объяснение механизма профилирования .источник
теперь в яме есть (с версии 1.1.1) флаг «пропустить».
Так что вы можете делать такие вещи, как:
в вашем модуле, а яма пропустит
[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Проект пропуска
источник