Maven Multi Module Project Setup с различными, различными зависимостями
-
24-12-2019 - |
Вопрос
Позвольте мне просто сказать это первым: я совершенно новый для Maven.Это сказал, что я искал, но не нашел ответы на следующий вопрос.Я нашел ответы на подобные вопросы, просто не этот сценарий.Или, может быть, я просто неправильно понял ответы, и это можно решить просто WIHT Multi Module Setup.
У меня будет следующая иерархия зависимости:
database
| |
| +---core
| | |
| | +---business
| | |
| | +------App1
| | |
| | +------App2
| |
| +---------------App3
|
+----------------------App4
.
Я хотел бы сделать его работать, так что изменения приводят к новым выпускам любых «выше) модулей / приложений / приложений.Это действительно простой случай установки MUVEL MAVEN или мне нужно сделать что-то еще?
Решение
Если вы хотите, чтобы выпустить один компонент, создают новый выпуск каждого проекта, просто используйте Maven-release-plugin : http://maven.apache.org/maven-realease/maven-relase-plugin/ .
Документация
согласно доктору, это будет:
.
- Убедитесь, что нет никаких незаметных изменений в источниках
- Убедитесь, что не работает зависимостей снимков
- Измените версию в POMs из X-Snapshot в новую версию (вам будет предложено для использования версий)
- Превратите информацию СКМ в POM, чтобы включить конечный пункт назначения тега
- Запустите тесты проекта против модифицированных POMS, чтобы подтвердить все в рабочем состоянии
- совершить модифицированные помытия
- Тейте код в SCM с именем версии (это будет предложено для)
- Поднимите версию в POMS для нового значения Y-Snapshot (эти значения также будут предложены для)
- совершить модифицированные помытия
из-за структуры Maven Multi модулей, они связаны вместе, и каждый проект будет натапливаться в новый выпуск.
В нескольких словах это будет:
- .
- Перемещение версии 1.0-Snapshot -> 1.1-Snapshot
- Тег 1.0
- generate 1.0.jar (о войне или что-то еще)
Использование плагина
Предполагая, что SCM правильно определен, и настроено управление репозиторией и распределением, просто добавьте эти строки
<project>
[...]
<build>
[...]
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.2</version>
<!-- optional, basic format is ${project.artifactId}-${project.version}.${project.type}-->
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
</configuration>
</plugin>
[...]
</plugins>
[...]
</build>
[...]
</project>
.
и вызов
mvn release:prepare
mvn release:perform
.
Наследование VS зависимости
Вы можете рассмотреть два различия Maven Appraches:
- .
- Наследование, это означает, что родитель и много / субмодулы
- агрегация, другими словами: использование зависимостей
В проекте Multi-Maven все ваши модули, включая родитель, делятся один и тот же жизненный цикл. Выпуская, подразумевающая высличение всех, и поэтому, выпуская только один не имеет смысла.
В вашем случае вы не можете изменять приложение от 1 до 3 Whithout, влияющее на приложение 4. Если приложение 4 зависит приложение 1, очевидно, что приложение 1 не может зависит от приложения 4 (циркулярные ссылки не допускаются).
Итак, вы хотите изолировать App4 и App1 до 3 жизненных циклов, вы не должны использовать мультимодулы, но просто разделите родительский проект или иерашию POM, как корпоративный> основной проект> Sub Project (не подмодулем). После этого просто объявите зависимость между приложением 4 и приложением 1. (... в APP4 POM.XML)
Просто еще одна мысль: имя ваших проектов и подмодулей звучит странно. «Классическая» иерархия часто (учитывая многоквартирный домен объекта для большого проекта):
Main Project (sometimes EAR) --> POM
|-- Business Object / DAO --> POM
| |-- Domain 1 --> JAR
| `-- Domain 2 --> JAR
|-- Core (depends on BO) --> JAR
`-- IHM / Web App (depends on core) --> WAR
.
Итак, база данных редко в верхней части иерархии.