Сбор изменений в многомодульном проекте Maven - PullRequest
1 голос
/ 07 декабря 2010

У меня есть многомодульный проект Maven, где модуль B зависит от модуля A. Как заставить модуль A перестраиваться всякий раз, когда я перестраиваю модуль B?Прямо сейчас я должен вручную установить модуль A, прежде чем делать что-либо с модулем B, и это настоящая боль.

PS Я вижу, что кто-то задал похожий вопрос без ответа: Maven: Как использовать причал: запустить вмультимодульный проект Maven, без необходимости установки

Ответы [ 2 ]

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

Это решается двумя способами. Во-первых, POM для B должен включать для A. Пока A находится в хранилище, когда B создается, он получит правильную версию.

Чтобы убедиться, что A будет построен до B, реактор Maven должен знать об этой зависимости. Это сделано в многомодульной сборке с элементами. POM верхнего уровня установлен для pom и будет иметь два элемента , один для A и один для B. Не имеет значения, в каком порядке они перечислены или насколько они глубоки, если они достижимые из исходного проекта, они будут построены в правильном порядке.

Обратите внимание, что нет никакого способа попробовать построить B и заставить реактор Maven найти источник для A и проверить его. Реактору всегда нужен исходный проект, и оба A и B должны быть найдены по графику элементов. Это связано с тем, что сборка для B не может определить актуальность артефакта хранилища для A, она должна запустить сборку A и позволить ей выяснить это. И для того, чтобы они делали это одновременно, родительский проект, который включает оба, как описано здесь, должен быть исходным проектом, который будет собран.

Также обратите внимание, что, хотя Maven не медленнее, чем Ant для многомодульных проектов такого рода, импорт проекта Maven в IDE обычно приводит к гораздо более быстрым сборкам, чем Maven может выполнить сам.

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

Работая в Eclipse IDE с m2eclipse, вы можете включить управление зависимостями рабочей области для времени компиляции, а также в конфигурации запуска Maven. В этом случае скомпилированные классы из зависимого проекта будут использоваться вместо jar из локального репозитория Maven. Это работает для обычных проектов без индивидуальной упаковки банок.

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

...