Выполнение определенной цели плагина Maven из командной строки в подмодуле многомодульного проекта реактора
Я ищу здесь общую технику, но давайте дадим конкретный пример. У меня есть проект с несколькими модулями, и я хотел бы запустить команду exec:java
из командной строки в отношении одного из подмодhive моего проекта.
Я знаю, что один подход заключается в том, что я могу запустить mvn install
на весь проект, а затем просто зайти в каталог подмодуля, запустить команду exec:java
из командной строки и разрешить артефакты для моего локального репозитория. Но запуск mvn install
все время становится довольно утомительным.
Мне бы очень понравилась возможность запуска exec:java
против реактора Maven, где classpath построен из активных модhive проекта в реакторе Maven. Проблема в том, что я не уверен, что это возможно. Наивный подход заключается в том, чтобы запустить команду exec:java
из корня проекта, но это пытается запустить плагин против каждого модуля в проекте, в отличие от целевого модуля, который мне интересен.
- Различные зависимости для разных профилей сборки
- Maven: Должен ли я хранить или удалять объявленные зависимости, которые также являются транзитными зависимостями?
- Запустите один тестовый метод с maven
- Что заставляет импортированный проект Maven в Eclipse использовать Java 1.5 вместо Java 1.6 по умолчанию и как я могу убедиться, что это не так?
- Укажите JDK для Maven для использования
Есть идеи? Я знаю, что моим мотивирующим примером был exec:java
, но на самом деле существует целый ряд одиночных целей плагина, которые я хотел бы время от времени запускать против моего проекта вне сферы жизненного цикла полной сборки.
- Управление зависимостями DLL с Maven
- Команда Maven, чтобы определить, какой файл settings.xml использует Maven
- Как выполнить программу с помощью Maven?
- Есть ли способ сказать surefire пропустить тесты в определенном пакете?
- заставить Maven скопировать зависимости в target / lib
- В чем разница между «mvn deploy» и локальным репо и «mvn install»?
- Каков наилучший способ избежать maven-jar?
- Извлечь версию из maven pom.xml в код
У меня есть проект с несколькими модулями, и я хотел бы запустить плагин
exec:java
из командной строки в отношении одного из подмодhive моего проекта.
Я не говорю, что это будет соответствовать вашему конкретному варианту использования, но можно запустить цель в подмножестве сборки с несколькими модулями, используя -pl, --projects
:
mvn exec:java -pl my-module
Я знаю, что один подход заключается в том, что я могу запустить «mvn install» для всего проекта, а затем просто зайти в каталог подмодуля, запустить команду exec: java из командной строки и разрешить артефакты для моего локального репозитория.
Разрешение зависимостей действительно выполняется через локальный repository.
Мне бы очень понравилась возможность запуска
exec:java
против реактора Maven, где classpath построен из активных модhive проекта в реакторе Maven.
На самом деле это не то, что делает реактор. Конструкция реактора строит ориентированный график модhive, выводит соответствующий порядок сборки из этого графика и запускает цель / фазу по модулю в расчетном порядке. Конструкция реактора не создает некоторого «глобального» classа.
Наивный подход заключается в том, чтобы запустить команду
exec:java
из корня проекта, но это пытается запустить плагин против каждого модуля в проекте, в отличие от целевого модуля, который мне интересен.
Ну, это ожидаемое поведение. Кажется, это не то, что вы на самом деле ищете.
Есть идеи? Я знаю, что моим мотивирующим примером был exec: java, но на самом деле существует целый ряд одиночных целей плагина, которые я хотел бы время от времени запускать против моего проекта вне сферы жизненного цикла полной сборки
Конструкция реактора позволяет это, но, как я писал, вы, похоже, ищете что-то другое. Возможно, если вы уточните свою конкретную потребность, я смогу дать лучший ответ.
Существует еще один способ, который позволяет вам выбирать несколько модhive для выполнения плагина.
У многих плагинов есть опция skip
, которую вы можете активировать в корневом проекте, установив ее значение в значение true
. Выполнение плагина будет пропущено по умолчанию для всех подмодhive. Подмодули, которые должны выполнить плагин, могут явно установить skip
на false
. Вам все равно нужно настроить любые необязательные атрибуты в корневом проекте.
Пример exec-maven-plugin
с конфигурацией для exec:exec
objective:
org.codehaus.mojo exec-maven-plugin 1.3.2 true java
org.codehaus.mojo exec-maven-plugin false
Несколько общий метод, который я использовал в этом случае, заключается в определении профиля в рассматриваемом POM подмодуля, который связывает exec: java с тестовой фазой. Например:
test-java org.codehaus.mojo exec-maven-plugin 1.1.1 test java com.foo.bar.MyClass
Затем, начиная с вершины вашего проекта, запустите:
mvn test -Ptest-java
Это установит межмодульный путь classа как обычно и попытается запустить профиль test-java во всех ваших подпроектах. Но поскольку только тот, о котором вы заботитесь, имеет определенный профиль, он единственный, кто сделает что-нибудь.
Для Maven требуется немного времени, чтобы размолоть ваши другие подпроекты NOOPing, но это не так уж плохо.
Следует отметить, что подпроект запускается с каталогом верхнего уровня в качестве текущего рабочего каталога (а не каталога подпроектов). Не так много можно сделать, чтобы обойти это, но, надеюсь, это не вызовет у вас неприятностей.
Возможно, предложение Паскаля – это то, что вы хотите. Обратите внимание, что в настоящее время невозможно сначала скомпилировать зависимости, а затем запустить ( exec:exec
и т. Д.) Приложение в одной команде Maven: https://jira.codehaus.org/browse/MNG-5059