Você só pode importar dependências gerenciadas . Isso significa que você só pode importar outros POMs para a dependencyManagement
seção do POM do seu projeto. ie
...
<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>
...
O que acontece então é que todas as dependências definidas na dependencyManagement
seção do other-pom-artifact-id
são incluídas na dependencyManagement
seção do seu POM . Você pode então fazer referência a essas dependências na dependency
seção de seu POM (e todos os seus POMs filhos) sem ter que incluir um version
etc.
No entanto, se em seu POM você simplesmente definir uma dependência normal, other-pom-artifact-id
então todos dependencies
da dependency
seção do other-pom-artifact-id
são incluídos transitivamente em seu projeto - no entanto, as dependências definidas na dependencyManagement
seção do other-pom-artifact-id
não são incluídas de forma alguma.
Então, basicamente, os dois mecanismos diferentes são usados para importar / incluir os dois tipos diferentes de dependências (dependências gerenciadas e dependências normais).
Há uma boa página no site do maven, que pode explicar isso muito melhor do que eu, Gerenciamento de dependências no Maven, e também contém informações específicas sobre a importação de dependências .
pom
A in for pai depom
B, você pode colocar B no gerenciamento de dependência do projeto A com escopoimport
?... <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 and Skinny WarVocê não pode ter um
pom
projeto de tipo comosimple dependency
em outro projeto. (Bem, você pode - mas não fará nada de útil). Só pode haver umparent-child
relacionamento. Isso é essencialmentemanaging dependency through inheritance
.import
escopo parapom
dependência de tipo na<dependencyManagement>
seção permite que você obtenha o equivalente amultiple inheritance
.Você poderia ter diferentes
poms
- cadamanaging
um com um monte de dependências relacionadas. Os projetos que usam estes podemimport
estespoms
e então especificar as dependências que eles precisam sem precisar se preocupar com a versão. Este é essencialmente obill of materials
conceito, que é ilustrado nos links especificados por @ DB5.Isso ajuda a evitar que
parent poms
projetos complexos de vários módulos fiquem muito grandes e complicados.fonte
Dois conceitos, muito semelhantes ao paradigma de programação orientada a objetos, ajudarão a responder à pergunta:
A seção dependencyManagement apenas declara as dependências e seus detalhes no projeto atual - o objetivo é o gerenciamento dos detalhes e a reutilização em outros projetos, seja por herança ( pai ) ou importação ( escopo ). É como declarar um tipo de dado em um programa e torná-lo disponível para uso.
A seção de dependência define o uso real das dependências no projeto, opcionalmente, herda os detalhes (ou seja, a versão, etc.) das dependências declaradas no dependencyManagment . É por isso que você terá dependências ausentes se apenas colocá-las em dependencyManagment . Isso é análogo a instanciar uma instância variável de um tipo de dados em um programa onde ele é necessário.
fonte