Maven Multi Module Project Setup с различными, различными зависимостями

StackOverflow https://stackoverflow.com//questions/22080291

Вопрос

Позвольте мне просто сказать это первым: я совершенно новый для Maven.Это сказал, что я искал, но не нашел ответы на следующий вопрос.Я нашел ответы на подобные вопросы, просто не этот сценарий.Или, может быть, я просто неправильно понял ответы, и это можно решить просто WIHT Multi Module Setup.

У меня будет следующая иерархия зависимости:

database
|  |
|  +---core
|      |  |
|      |  +---business 
|      |        |
|      |        +------App1
|      |        |
|      |        +------App2
|      |
|      +---------------App3
|
+----------------------App4
.

Я хотел бы сделать его работать, так что изменения приводят к новым выпускам любых «выше) модулей / приложений / приложений.Это действительно простой случай установки MUVEL MAVEN или мне нужно сделать что-то еще?

Это было полезно?

Решение

Если вы хотите, чтобы выпустить один компонент, создают новый выпуск каждого проекта, просто используйте : 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
.

Итак, база данных редко в верхней части иерархии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top