Maven: Как использовать Jetty: запустить в многомодульном проекте Maven без необходимости установки - PullRequest
24 голосов
/ 07 декабря 2010

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

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

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

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

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

Ответы [ 5 ]

7 голосов
/ 07 декабря 2010

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

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

3 голосов
/ 16 июля 2013

В Eclipse вы можете использовать плагин «Run Jetty» для достижения этой цели.
В конфигурации запуска IDEA есть опция «Resolve Workspace artifacts», отметьте ее.

2 голосов
/ 10 февраля 2011

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

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

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

1 голос
/ 01 ноября 2017

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

1 голос
/ 24 марта 2016

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

...