Используя Maven, как я могу собрать несколько модулей в один артефакт? - PullRequest
2 голосов
/ 14 сентября 2010

У нас есть проект материнского корабля с несколькими модулями:

foo
+ foo-core
+ foo-resource
+ foo-util
+ foo-whatever

Я хочу разрешить разработчикам включать модули ядра, ресурсов и утилит в качестве зависимостей (исключая модуль -whither).Я знаю, что могу указать, что они включают каждую зависимость, но было бы неплохо позволить им просто указать что-то вроде

<artifactId>foo-sdk</artifactId>

и получить все, что им нужно для разработки foo.Это имеет дополнительное преимущество, заключающееся в том, что он дает нам возможность добавлять (или удалять) то, что входит в SDK.

Было бы лучше, если бы foo-sdk был не просто банкой с другими банками, застрявшими в ней.Я бы предпочел, чтобы это был pom, который просто указывает на другие артефакты.

Я чувствую, что видел это раньше, но не могу найти инструкции для этого.Я извлек Плагин сборки Maven , но похоже, что он не предназначен для этого.

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Вы можете сгруппировать зависимости в проекте с упаковкой типа pom. Из книги Maven:

3.6.1. Группировка зависимостей

Если у вас есть набор зависимостей которые логически сгруппированы вместе. Вы можете создать проект с пом упаковка, которая группирует зависимости все вместе. Например, давайте предположим, что ваше приложение использует Hibernate, популярное объектно-реляционное отображение фреймворк. Каждый проект, который использует Hibernate также может иметь зависимость на платформе Spring и MySQL Драйвер JDBC. Вместо того, чтобы включить эти зависимости в каждом проект, который использует Hibernate, Spring, и MySQL вы могли бы создать специальный POM, который не делает ничего больше, чем объявить набор общих зависимостей. Вы можете создать проект под названием persistence-deps (сокращение от Постоянство зависимости), и есть каждый проект, который нужно сделать настойчивость зависит от этого удобства Проект:

Пример 3.11. Консолидация зависимостей в одном проекте POM

<project>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernateVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>${hibernateAnnotationsVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-hibernate3</artifactId>
      <version>${springVersion}</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysqlVersion}</version>
    </dependency>
  </dependencies>
  <properties>
    <mysqlVersion>(5.1,)</mysqlVersion>
    <springVersion>(2.0.6,)</springVersion>
    <hibernateVersion>3.2.5.ga</hibernateVersion>
    <hibernateAnnotationsVersion>3.3.0.ga</hibernateAnnotationsVersion>
  </properties>
</project>

Если вы создадите этот проект в каталог с именем persistence-deps, все вам нужно сделать, это создать pom.xml и запустить mvn install. поскольку тип упаковки pom, это POM установлен в вашем локальном хранилище. Теперь вы можете добавить этот проект как зависимость и все ее зависимости будет добавлен как переходный зависимости от вашего проекта. Когда ты объявить зависимость от этого persistence-deps проект, не забудьте указать тип зависимости как pom.

Пример 3.12. Объявление зависимости от POM

<project>
  <description>This is a project requiring JDBC</description>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>org.sonatype.mavenbook</groupId>
      <artifactId>persistence-deps</artifactId>
      <version>1.0</version>
      <type>pom</type>
    </dependency>
  </dependencies>
</project>

Если позже вы решите переключиться на другой драйвер JDBC (например, JTDS), просто заменим зависимости в проекте Persistence-Deps для использования net.sourceforge.jtds: jtds вместо mysql: mysql-java-соединитель и обновление номер версии. Все проекты в зависимости от настойчивости будет использовать deps JTDS, если они решат обновить до более новая версия. Консолидация связанных зависимости это хороший способ сократить на длину файлов pom.xml, которые начать зависеть от большого количество зависимостей. Если вам нужно разделить большое количество зависимостей между проектами, вы также можете просто установить отношения родитель-ребенок между проектами и рефакторинг все общие зависимости от родителя проект, но недостаток подход родитель-ребенок заключается в том, что Проект может иметь только одного родителя. Иногда имеет смысл сгруппировать аналогичные зависимости вместе и ссылаться на зависимость пом. Сюда, ваш проект может ссылаться как можно больше эти сводные POMs зависимости как это нужно. Примечание

Maven использует глубину зависимости в дереве при разрешении конфликтов используя подход ближайших побед. С помощью метод группировки зависимостей выше подталкивает эти зависимости один уровень вниз в дереве. Держите это в ум при выборе между группировкой в пом или используя dependencyManagement в родительском ПОМ

0 голосов
/ 14 сентября 2010

Не будет ли это просто еще одним подмодулем foo-sdk с пакетом pom и зависимостями от foo- {core, resource, util}?

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