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
в родительском ПОМ