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

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

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

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

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

спасибо!
Янив!--3-->

5 ответов


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

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


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


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

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

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


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


Я решил с помощью Maven launcher и настройки разрешить артефакты рабочей области, это не проверяется по умолчанию enter image description here