Построить несколько EAR, выбирая подмножество банок - PullRequest
2 голосов
/ 21 февраля 2012

Наша текущая рабочая структура Maven строит один EAR и имеет следующий вид

рабочее пространство

>parent proj (containing root pom.xml)
    >ear proj
    >web proj
    >jar1
    >jar2
    >jarN

Теперь нам нужно настроить это так, чтобы мы построили несколько EAR (для разных требований), используя комбинацию jar.

Таким образом, предлагаемое рабочее пространство теперь будет выглядеть так:

рабочее пространство

>parent proj (containing root pom.xml)

    >ear projects
        >ear1 
        >ear2
    >web projects
        >web1
        >web2

    >component jars
        >jar1
        >jar2
        >jarN

и в ear1 project pom.xml мы хотим выбрать нужные веб-проекты и jar-проекты.

Вопрос:

a) возможна ли указанная выше структура - поскольку папки с именами «ear projects», «web projects», «component jars» на самом деле не имеют POM и ничего не собирают

б) возможно ли построить файл ear1 pom.xml с использованием артефактов вне одной и той же папки?

Ранее проект ear1 был параллелен jar1 и jar2, и все они были дочерними модулями корневого pom.xml. Но в предложенной структуре ear1 построен с использованием модулей не параллельно, а ../web projects / web1 ../component jars / jar1 и т. Д.

в) есть ли лучший способ добиться этого?

1 Ответ

3 голосов
/ 24 февраля 2012

Предлагаемое рабочее пространство выглядит хорошо. Для ясности я выложу это здесь (примечание, ear , web и * - все пустые каталоги).

parent (contains root pom.xml)
|--- ear
     |--- ear1 (contains ear1 pom.xml)
     |--- ear2 (contains ear2 pom.xml)
|--- web
     |--- web1 (contains web1 pom.xml)
     |--- web2 (contains web2 pom.xml)
|--- components
     |--- jar1 (contains jar1 pom.xml)
     |--- jar2 (contains jar2 pom.xml)
     |--- jarN (contains jarN pom.xml)

Поскольку зависимости проекта берутся из хранилища (локального или удаленного), нет проблем, что модули не будут расположены на одном уровне. Вы должны объявить их как обычные зависимости. Например, в ear1 вы можете указать:

<dependencies>
  <dependency>
    <groupId>_your_groupId_</groupID>
    <artifactId>_jar1_artifactId_</artifactId>
    <version>_jar1_version_</version>
  <dependency>
  <dependency>
    <groupId>_your_groupId_</groupID>
    <artifactId>_web1_artifactId_</artifactId>
    <version>_web1_version_</version>
  <dependency>
</dependencies>

Я не уверен, что полностью понимаю ваши потребности, но я постараюсь описать, что я буду делать.

Вы можете использовать профили, чтобы указать, какие проекты создавать. Например, предположим, что проект ear1 зависит от проектов jar1 , jar2 , jar4 и web2 . В этом случае в корневом файле pom.xml вы можете указать такой профиль:

<profiles>
  <profile>
    <id>ear1</id>
    <modules>
      <module>components/jar1</module>
      <module>components/jar2</module>
      <module>components/jar4</module>
      <module>web/web2</module>
      <module>ear/ear1</module>
    </modules>
  </profile>
</profiles>

Если вы запустите mvn package -P ear1, Maven будет создавать только те модули, которые указаны в разделе <modules> профиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...