Використання профілів в Maven
У maven можна змінити налаштування проекту в залежності від оточення, ця фіча реалізована через профілі проекту. Профіль містить у собі настройки, які будуть додані до основних налаштувань, або, навпаки, замінять їх.
... . . . test . ... . ... . ... . ... . ... . ... . ... . ... . ... . .
Профіль можна активувати (включити) явною. Для цього потрібно вказати ім'я профілю разом з прапором-P в рядку запуску maven:
mvn-Pімя_профіля
*-P і ім'я профілю пишуться разом
Так само можна включити профіль якщо задати умови активації. Профіль буде активовано, якщо виповнилося хоча б одна умова активації. Умовою активації може бути наявність або значення певної змінної оточення, версія JDK, версія або тип операційної системи, наявність або відсутність певного файлу і т.п.
. ... . . . test . . false . 1.5 . . Windows XP . Windows . x86 . 5.1.2600 . . . mavenVersion . 2.0.3 . . . $ {basedir}/file2.properties . $ {basedir}/file1.properties . . . ... . .
Приклад
Наприклад, у проекті є агрегують модуль з модулем інтеграційних тестів і модулем selenium тестів, а вам не хочеться, щоб тести запускалися на машинах розробників під час виконання рутинної операції "компіляція - юніт-тести - упаковка" mvn clean install.
Це побажання можна реалізувати за допомогою мейвеновскіх профілів.Початковий pom.xml для агрегують модуля виглядає приблизно так:
. 4.0.0 . habr . aggr . 1.0.0-SNAPSHOT . pom . Profiles Demo - Top . . module1 . integration-tests . selenium-tests . .
Результат запуску mvn clean install:
----------------------------------------------- ------------------------- Profiles Demo - Module1 ............................... SUCCESS [1.859s] Profiles Demo - Integration Tests ..................... SUCCESS [0.265s] Profiles Demo - Selenium Tests ........................ SUCCESS [0.250s] Profiles Demo - Top ................................... SUCCESS [1.172s] -------------------------------------------------- ----------------------
Виділяємо інтеграційні тести в окремий профіль з ім'ям it:
. 4.0.0 . habr . aggr . 1.0.0-SNAPSHOT . pom . Profiles Demo - Top . . . module1 . selenium-tests . . . . . it . . integration-tests . . .
Запускаємо mvn clean install
----------------------------------------------- ------------------------- Reactor Summary: -------------------------------------------------- ---------------------- Profiles Demo - Module1 ............................... SUCCESS [1.828s] Profiles Demo - Selenium Tests ........................ SUCCESS [0.282s] Profiles Demo - Top ................................... SUCCESS [1.219s] -------------------------------------------------- ----------------------
Як бачимо, інтеграційні тести не були включені в процес складання. Щоб включити інтеграційні тести треба вказати ім'я профілю it.
mvn clean install-Pit
----------------------------------------------- ------------------------- Profiles Demo - Module1 ............................... SUCCESS [1.875s] Profiles Demo - Selenium Tests ........................ SUCCESS [0.266s] Profiles Demo - Integration Tests ..................... SUCCESS [0.266s] Profiles Demo - Top ................................... SUCCESS [1.156s] -------------------------------------------------- ----------------------
От чорт, інтеграційні тести знову з нами.
При вказівці профілю it, Мейв додав (саме додав, а не замістив всю конфігурацію проекту) модуль integration-tests в збірку. Аналогічно можна зробити і з модулем Selenium тестів.
. 4.0.0 . habr . aggr . 1.0.0-SNAPSHOT . pom . Profiles Demo - Top . . . module1 . . . . it . . integration-tests . . . . selenium . . selenium-tests . . . .
Зібрати всі разом можна вказавши обидва профілю mvn clean install-Pit-Pselenium:
----------------------------------------------- ------------------------- Profiles Demo - Module1 ............................... SUCCESS [1.812s] Profiles Demo - Integration Tests ..................... SUCCESS [0.312s] Profiles Demo - Selenium Tests ........................ SUCCESS [0.250s] Profiles Demo - Top ................................... SUCCESS [1.141s] -------------------------------------------------- ----------------------
А тепер навпаки
Зробимо зворотний фінт вухами. У моєму проекті один з модулів витягує з репозиторію сервер додатків, запакований у вигляді zip файлу, розпаковує його в певну папку, витягує артефакти проекту і закидає їх у папку сервера програми, генерує батники та конфіги для запуску всіх цих булочок і т.п.Потрібно щоб на машинах розробників цей модуль запускався без будь-якої магії, а на білд сервері, під час деплоя снепшот, навпаки не запускався.
Початковий pom.xml виглядає так:
. 4.0.0 . habr . aggr . 1.0.0-SNAPSHOT . pom . Profiles Demo - Top . . . module1 . create-server . .
----------------------------------------------- ------------------------- Profiles Demo - Module1 ............................... SUCCESS [1.875s] Profiles Demo - Create Server ......................... SUCCESS [0.203s] Profiles Demo - Top ................................... SUCCESS [1.250s] -------------------------------------------------- ----------------------
Міняємо pom.xml, переселяємо всі модулі в профіль за замовчуванням default, додаємо в конфігурацію профілю секцію .... А для сценарію, коли не потрібно робити збірку з сервером додатків, створюємо профіль noserver, де вказані всі модулі, крім сервера додатків.
. 4.0.0 . habr . aggr . 1.0.0-SNAPSHOT . pom . Profiles Demo - Top . . . . . default . . true . . . module1 . create-server . . . . . noserver . . module1 . . . .
Запускаємо mvn clean install (сценарій на машині розробника):
----------------------------------------------- ------------------------- Profiles Demo - Module1 ............................... SUCCESS [1.891s] Profiles Demo - Create Server ......................... SUCCESS [0.266s] Profiles Demo - Top ................................... SUCCESS [1.188s] -------------------------------------------------- ----------------------
Зібралися всі модулі разом із сервером додатків.
А тепер запускаємо maven з профілем noserver (сценарій для білд сервера):
mvn clean install-Pnoserver:
----------------------------------------------- ------------------------- Profiles Demo - Module1 ............................... SUCCESS [1.734s] Profiles Demo - Top ................................... SUCCESS [1.234s] -------------------------------------------------- ----------------------
Як бачимо, модуль сервера не бере участь в складанні.
Кінцівка
Аналогічно можна управляти залежностями, плагінами, репозиторіями і т.п. Наприклад, для MacOS можна робити збірку з однією версією графічної бібліотеки, а на Win з іншого.Щоб не використовувати імена профілів, можна на білд сервері встановити глобальну змінну оточення, при наявності якої буде активуватися той чи інший профіль.
Посилання
maven.apache.org/... m.html # Profiles
Опубліковано: 08/06/11 @ 07:31
Розділ Різне
Рекомендуємо:
Як не потрібно рекламувати себе
Яндекс.Субботнік з розробки інтерфейсів в Києві, 28 травня
Яндекс.Субботнік з розробки інтерфейсів в Києві, 28 травня
Конкатенація для пошукової оптимізації великих сайтів
Конкатенація для пошукової оптимізації великих сайтів