Мне удалось сделать это с помощью Maven 3.3.9 ... но позвольте мне описать мой сценарий кейса:
Я работаю с фреймворком Java под названием Liferay, где есть инструмент под названием Service Builderкоторый может создавать и развертывать службы с использованием Maven с точной структурой, как вы описали:
Service Layer
|-pom.xml (version 1.12.0-SNAPSHOT)
|-Service Portlet
| |-pom.xml (version 1.16.0-SNAPSHOT)<---
|-Service | Artifact dependency
| |-pom.xml (version 1.5.0-SNAPSHOT)-----
Как видите, модуль приложения портлета создается с зависимостью, то есть с файлом .jar,Пакетные интерфейсы, среди прочего, для работы сервисов.
Кстати, я делал это с моим проектом, используя модули разных версий.Я нашел интересную статью, рассказывающую об этой практике: Выпуск модулей многомодульного проекта с независимыми номерами версий .Вы можете прочитать реферат, чтобы сделать свои собственные выводы о том, подходят ли модули управления версиями ... но с моей точки зрения, после прочтения требований Клиента, мне кажется разумным, что поддержка версий модулей должна поддерживатьсяMaven, не будучи слишком болезненным для реализации.
Запуск mvn release:prepare
и mvn:perform
внутри родительского (Service Layer) пути.Maven выполняет сборку и развертывание релиза в следующем порядке: 1) родительский pom 2) сервисная зависимость 3) сервисный портлет.
Maven позаботился о порядке, и это хорошо ... но сервисная зависимостьпостроен на основе исходного кода портлета с целью запуска в родительском проекте: mvn liferay:build-service
... поэтому на зависимость влияет исходный код приложения с портлетом (звучит немного странно).Это была сложная часть в моем случае.
Итак, как нам построить и развернуть служебную зависимость для использования ее портлетом службы?
Что ж, решением для этого было использование конфигурации в подключаемом модуле maven-release-plugin, которая позволяетMaven для выполнения конкретных целей на этапе release:perform
в любом из проектов.Я добавил эту конфигурацию в объявлении maven-release-plugin в родительском pom.xml (Service Layer):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<goals>clean liferay:build-service deploy</goals>
</configuration>
</plugin>
И Maven смог развернуть родительский и каждый из дочерних модулей с помощьюнаши предпочтительные номера версий (вас попросят ввести их).
Обобщенный ответ и рекомендация: попробуйте использовать конфигурацию <goals>
и запустите mvn release:prepare
и mvn release:perform
на родительском уровне
Родитель и модули должны быть развернуты следующим образомприказ.
Надеюсь, это вдохновит кого-то в похожей ситуации хотя бы через 5 лет.