Модули Maven + Сборка отдельного конкретного модуля
У меня есть многомодульный проект Maven с родительским проектом P
и три подмодуля A
, B
, а также C
, И то и другое B
а также C
военные проекты, и оба зависят от A
,
я могу печатать mvn compile
в P
и правильно скомпилировать все подмодули. Проблема возникает, когда я хочу сделать операции для определенных модулей.
Я хотел бы иметь возможность упаковать войну для проекта B
, но когда я запускаю команду пакета из B
каталог, он жалуется, что не может найти зависимости для A
,
Я понимаю из этого вопроса: Maven и зависимые модули, которые, возможно, Maven на самом деле не предназначены для такого типа разрешения зависимостей, но это ставит вопрос о том, как мне упаковать B
?
Должен ли я бежать
mvn package
для всей иерархии проекта, когда я действительно просто хочуB
?Нужно ли устанавливать моментальные снимки A в мой локальный репозиторий каждый раз, когда я хочу упаковать
B
?
Этот второй сценарий не очень весело, когда A
все еще находится в активной разработке.
Есть лучшие практики здесь?
7 ответов
Здесь есть лучшие практики?
Используйте расширенные варианты реакторов Maven, а именно:
-pl, --projects
Build specified reactor projects instead of all projects
-am, --also-make
If project list is specified, also build projects required by the list
Так просто cd
в родительский каталог P и запустите:
mvn install -pl B -am
И это создаст B и модули, требуемые B.
Обратите внимание, что вам нужно использовать двоеточие, если вы ссылаетесь на artifactId
который отличается от имени каталога:
mvn install -pl :B -am
Как описано здесь: /questions/34840461/opredelite-spisok-modulej-kotoryie-dolzhnyi-byit-sobranyi-v-mnogoproektnoj-sborke-maven/34840469#34840469
Скажем, Parent pom.xml содержит 6 модулей, и вы хотите запустить A, B и F.
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
<module>D</module>
<module>E</module>
<module>F</module>
</modules>
1-CD в родительский проект
mvn --projects A,B,F --also-make clean install
ИЛИ ЖЕ
mvn -pl A,B,F -am clean install
ИЛИ ЖЕ
mvn -pl A,B,F -amd clean install
Примечание. Если вы укажете проект с параметром -am, Maven создаст все проекты, от которых зависит указанный проект (прямо или косвенно). Maven проверит список проектов и пройдет по дереву зависимостей, найдя все проекты, которые ему нужно построить.
В то время как команда -am делает все проекты, требуемые конкретным проектом, в многомодульной сборке, опция -amd или --also-make-dependents настраивает Maven для создания проекта и любого проекта, который зависит от этого проекта. При использовании --also-make-dependents Maven проверяет все проекты в нашем реакторе, чтобы найти проекты, которые зависят от конкретного проекта. Он будет автоматически строить эти проекты и ничего больше.
Maven абсолютно был разработан для этого типа зависимости.
mvn package
ничего не установит в ваш локальный репозиторий, он просто упакует проект и оставит его в целевой папке.
Делать mvn install
в родительском проекте (A), при этом все субмодули будут установлены в репозиторий Maven вашего компьютера, если нет никаких изменений, вам просто нужно скомпилировать / упаковать субмодуль (B), и Maven примет уже упакованный и Установленные зависимости в самый раз.
Вам просто нужно mvn install
в родительском проекте, если вы обновили некоторую часть кода.
Если вы ранее запустили mvn install в проекте B, он будет установлен в вашем локальном хранилище, поэтому при сборке пакета A Maven может разрешить зависимость. Таким образом, до тех пор, пока вы устанавливаете проект B, каждый раз, когда вы меняете его, ваши сборки для проекта A будут обновляться.
Вы можете определить многомодульный проект с помощью агрегатора pom для создания набора проектов.
Также стоит упомянуть m2eclipse, он интегрирует Maven в Eclipse и позволяет (опционально) разрешать зависимости из рабочей области. Поэтому, если вы взламываете несколько проектов, содержимое рабочей области будет использоваться для компиляции. Когда вы будете довольны своими изменениями, запустите mvn install (для каждого проекта по очереди или с помощью агрегатора), чтобы поместить их в локальный репозиторий.
Вы компилируете, упаковываете, очищаете определенные модули с помощью этой команды:
mvn <target> -pl <MODULE> -am
- Укажите имя модуля или проекта, используя
-pl
-
-am
также сделать.
Взгляните на мой ответ Maven и зависимые модули.
Плагин Maven Reactor предназначен для работы с частью проекта.
Конкретная цель, которую вы хотите использовать reactor:make
,
Вы говорите, что "действительно просто хотите B", но это неверно. Вы хотите B, но вы также хотите обновить A, если в него были внесены какие-либо изменения ("активная разработка").
Итак, иногда вы хотите работать с A, B и C. Для этого случая у вас есть проект-агрегатор P. Для случая, когда вы хотите работать с A и B (но не хотите C), вы должны создать проект-агрегатор Q,
Изменить 2016: приведенная выше информация, возможно, была актуальна в 2009 году. С 2016 года я настоятельно рекомендую игнорировать это в большинстве случаев и просто использовать -am
или же -pl
флаги командной строки, как описано в принятом ответе. Если вы используете версию maven до v2.1, сначала измените ее:)