Подтвердить что ты не робот

Maven: как использовать причал: запустить в мультимодульном проекте Maven, без необходимости установки

Я новичок в Maven. У меня есть мультимодульный проект maven 2, который имеет следующую структуру (несколько упрощенную):

Project (POM packaging)
  |
  +-- Module1 (JAR)
  |     |
  |     +-- src
  |          |
  |          +-- main
  |               |
  |               +-- java
  |               +-- resources
  |
  +-- Module2 (JAR)
  |      |
  |     ...
  |
  +-- Web Module (WAR)
         |
        ...

Я настроил веб-модуль для включения плагина Maven Jetty. Это отлично работает для создания артефактов производства. Для разработки я обнаружил, что мне нужно вызвать mvn install в любом модуле, который я меняю, а затем остановить причал и вызов причала: снова запустите.
Было бы гораздо более продуктивно, если бы плагин мог выбирать изменения непосредственно из каждого целевого каталога модуля. Согласно документации плагина причал, похоже, такая функция, но, похоже, это относится только к модулю WAR.
Еще более важным для меня является возможность вносить изменения в файлы ресурсов без необходимости перезагрузки причала. Это связано с тем, что большинство ресурсов являются файлами шаблонов HTML, и чрезвычайно важно разрабатывать и обновлять шаблоны во время разработки, не требуя перезапуска, чтобы увидеть изменения.

Итак, есть ли способ установить путь к классам плагина причал, чтобы включить каталоги целевых/классов и ресурсов каждого модуля JAR вместо реальных JAR в локальном репозитории?

Спасибо!
Янов

4b9b3361

Ответ 1

Это невозможно в мультимодульном проекте Maven. Основным правилом проектов Maven является то, что каждый проект должен быть в состоянии самостоятельно. Это не мешает им строиться вместе, но любой проект должен быть построен сам по себе, пока все его зависимости будут удовлетворены.

В этом случае это означает, что проект WAR не может смотреть на другие проекты, чтобы проверить, нужно ли их обновлять, POM для этих других проектов является окончательным выражением о том, что необходимо сделать для создания артефакта. И как только артефакт построен, он помещается в локальный репозиторий. Нет никакой связи между исходными файлами и артефактом в этой точке, поэтому нет возможности рассказать, какие исходные файлы будут приводить к восстановлению артефакта, от которого зависит WAR.

Ответ 2

В Eclipse вы можете использовать плагин "Run Jetty" для достижения этого.
В конфигурации запуска IDEA есть опция "Разрешить артефакты рабочей области", проверьте ее.

Ответ 3

Если вы используете M2Eclipse (плагин Eclipse для тесной интеграции Maven в Eclipse), вы можете запустить свою пристань: запустить цель в веб-модуле, а другие зависимости будут учтены из вашего рабочего пространства, даже если они вообще не доступны в вашем локальном репозитории.

В вашем прогоне есть только вариант, чтобы сообщить Maven о необходимости разрешать ваши модули в самой рабочей области (по умолчанию он просто извлекал бы то, что развертывается в локальном репозитории).

К сожалению, я не могу иметь такое же поведение в IDEA, и мне нужно запустить установку перед запуском причала: запустите на веб-модуле.

Ответ 4

На основе этого ответа: Лучшая практика по. `mvn install`, многомодульные проекты и запуск одного подмодуля обходной путь вокруг жестоких ограничений Mavens и ограничений для реактора заключается в том, чтобы определить плагин в родительском помпе с пропуском true, а затем повторно использовать его в соответствующем подмодуле, используя skip false.

Ответ 5

Я решил использовать пусковую установку maven и настроить артефакты Resolve Workspace,  который не проверяется по умолчанию введите описание изображения здесь