Вы можете импортировать только управляемые зависимости . Это означает, что вы можете импортировать только другие POM в dependencyManagement
раздел POM вашего проекта. т.е.
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>other.pom.group.id</groupId>
<artifactId>other-pom-artifact-id</artifactId>
<version>SNAPSHOT</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
...
Затем происходит то, что все зависимости, определенные в dependencyManagement
разделе other-pom-artifact-id
, включаются в dependencyManagement
раздел вашего POM . Затем вы можете ссылаться на эти зависимости в dependency
разделе вашего POM (и всех его дочерних POM) без необходимости включать и version
т. Д.
Однако, если в вашем POM вы просто определяете нормальную зависимость, other-pom-artifact-id
тогда все dependencies
из dependency
раздела other-pom-artifact-id
включены в ваш проект транзитивно, однако зависимости, определенные в dependencyManagement
разделе other-pom-artifact-id
, не включаются вообще.
Таким образом, в основном используются два разных механизма для импорта / включения двух разных типов зависимостей (управляемые зависимости и обычные зависимости).
На веб-сайте maven есть хорошая страница, которая может объяснить это намного лучше, чем я, Управление зависимостями в Maven, а также содержит конкретную информацию об импорте зависимостей .
pom
A in является родительским дляpom
B, можете ли вы поместить B в управление зависимостями проекта A с областью действияimport
?... <dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>pomlib-lib</artifactId> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>pomlib-war</artifactId> <type>war</type> </dependency> </dependencies> </project>
DRY и Skinny WarВы не можете иметь
pom
типовой проектsimple dependency
в другом проекте. (Ну можно - но ничего полезного не сделает). Могут быть толькоparent-child
отношения. Это по сутиmanaging dependency through inheritance
.import
область дляpom
зависимости типа в<dependencyManagement>
разделе позволяет получить эквивалентmultiple inheritance
.У вас могут быть разные
poms
- у каждойmanaging
куча связанных зависимостей. Проекты , которые используют эти могли быimport
они ,poms
а затем указать зависимости , которые им необходимы , без необходимости беспокоиться о версии. По сути, этоbill of materials
концепция, которая проиллюстрирована в ссылках, указанных в @ DB5.Это помогает предотвратить
parent poms
слишком большие и громоздкие сложные многомодульные проекты.источник
Две концепции, очень похожие на парадигму объектно-ориентированного программирования, помогут ответить на вопрос:
Раздел dependencyManagement только объявляет зависимости и их детали в текущем проекте - цель - управление деталями и их повторное использование в других проектах, либо через наследование ( родительский ) , либо через импорт ( область действия ). Это похоже на объявление типа данных в программе и предоставление его для использования.
Раздел зависимостей определяет фактическое использование зависимостей в проекте, опционально наследует детали (т. Е. Версию и т. Д.) Зависимостей, объявленных в dependencyManagment . Вот почему у вас будут отсутствующие зависимости, если вы поместите их только в dependencyManagment . Это аналогично созданию экземпляра переменной типа данных в программе, где это необходимо.
источник