Создайте один модуль из многомодульного pom.
-
06-07-2019 - |
Вопрос
Возможно ли это сделать?
Окружающая среда:Мультимодульный пом состоит из 3-х модулей:мм1, мм2, мм3.Модуль mm2 имеет зависимость mm1.Родительский pom можно построить без каких-либо ошибок.
Вопрос:Можно ли собрать один модуль mm2 (т. е. запустить maven из базового каталога mm2) без установки mm1 в локальный репозиторий?
Спасибо.
Решение
Без автоматической установки нельзя, но можно собирать только выбранные проекты.Вам нужна сборка с несколькими модулями (я предполагаю, что да).В режиме реактора каждую команду необходимо запускать из корень реактора.
Итак, в вашем случае:
mvn reactor:make -Dmake.folders=mm2
В этом случае вы строите модуль mm2 и модули, от которых он зависит (mm1).
Полезные ссылки:
Из книжных примеров я строю только проект persist и его модель проекта зависимостей.Другие проекты не затронутыmvn reactor:make -Dmake.folders=sample-persist
Другая полезная команда: reactor:make-dependents
которые создают проекты, зависящие от X.
Другие советы
Я не совсем понимаю, что вы подразумеваете под «без установки mm1 в локальный репозиторий».Вы имеете в виду строительство мм2 раньше или никогда?
Под вопросом, возможно, один из новых вариантов сборки, анонсированных в Советы и рекомендации Maven:Расширенные параметры реактора Сообщение в блоге может помочь:
Начиная с выпуска Maven 2.1, существуют новые параметры командной строки Maven, которые позволяют манипулировать тем, как Maven будет создавать мультимодульные проекты.Эти новые варианты:
-rf, --resume-from Resume reactor from specified project -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 -amd, --also-make-dependents If project list is specified, also build projects that depend on projects on the list
Я специально думал о -pl
и -am
параметры.Чтобы собрать подмножество модулей, запустите следующую команду из корневого каталога:
$ mvn --projects mm2 --also-make install
Однако я не уверен, что это отвечает на ваш вопрос (который для меня не совсем ясен).
Это противоречит принципу зависимостей Maven2.Какой именно интерес в этом?
Однако мы можем себе представить, что зависимость mm1 от mm2 можно определить как system
зависимость:
<dependency>
<groupId>...</groupId>
<artifactId>mm1</artifactId>
<version>...</version>
<scope>system</scope>
<systemPath>../mm1/target/</systemPath>
</dependency>