Maven: Как использовать пристань: запустить в проекте Multi-Module Maven, не требуя установки

StackOverflow https://stackoverflow.com/questions/4371373

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

В Eclipse вы можете использовать плагин «roundty» для достижения этого.
В конфигурации Idey's Run, есть вариант «разрешать артефакты рабочей области», проверяйте его.

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

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

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

На основании этого ответа:Лучшая практика WRT. `mvn install`, multi-модульные проекты и запуск одного подмодуляОбходной путь вокруг Mavens Ужасные ограничения и ограничения реактора состоит в том, чтобы определить плагин в родительском POM с пропуском True, а затем переоценить его в соответствующем подмодуле, используя Skip False.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top