Выполнение определенной цели плагина Maven из командной строки в подмодуле многомодульного проекта реактора

Я ищу здесь общую технику, но давайте дадим конкретный пример. У меня есть проект с несколькими модулями, и я хотел бы запустить команду exec:java из командной строки в отношении одного из подмодhive моего проекта.

Я знаю, что один подход заключается в том, что я могу запустить mvn install на весь проект, а затем просто зайти в каталог подмодуля, запустить команду exec:java из командной строки и разрешить артефакты для моего локального репозитория. Но запуск mvn install все время становится довольно утомительным.

Мне бы очень понравилась возможность запуска exec:java против реактора Maven, где classpath построен из активных модhive проекта в реакторе Maven. Проблема в том, что я не уверен, что это возможно. Наивный подход заключается в том, чтобы запустить команду exec:java из корня проекта, но это пытается запустить плагин против каждого модуля в проекте, в отличие от целевого модуля, который мне интересен.

Есть идеи? Я знаю, что моим мотивирующим примером был exec:java , но на самом деле существует целый ряд одиночных целей плагина, которые я хотел бы время от времени запускать против моего проекта вне сферы жизненного цикла полной сборки.

У меня есть проект с несколькими модулями, и я хотел бы запустить плагин 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

  • Предупреждение. Путь сборки указывает среду выполнения J2SE-1.4
  • Как я могу сказать jaxb / Maven для создания нескольких пакетов схем?
  • Как вручную установить артефакт в Maven 2?
  • Почему у Maven такая плохая репутация?
  • Ресурс из src / main / ресурсов не найден после сборки с maven
  • Добавить зависимость в Maven
  • Зависимость теста Maven от мультимодульного проекта
  • Могу ли я использовать путь к зависимости от Maven как свойства?
  • Найти драйвер Oracle JDBC в репозитории Maven
  • запустить основной class проекта Maven
  • Maven и библиотека JOGL?
  • Давайте будем гением компьютера.