Qual é a diferença entre dependencyManagement
e dependencies
?
Eu vi os documentos no site da Apache Maven.
Parece que uma dependência definida sob o dependencyManagement
pode ser utilizada em seus módulos filhos sem especificar a versão.
Por exemplo:
Um projeto pai (Pro-par) define uma dependência sob o "gerenciamento de dependência":
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8</version>
</dependency>
</dependencies>
</dependencyManagement>
Então no filho do Pro-par, posso usar o junit:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
No entanto, eu me pergunto se é necessário definir junit na pompa dos pais? Por que não defini-lo diretamente no módulo necessário?
A Gestão de Dependências permite consolidar e centralizar a gestão das versões de dependência sem adicionar dependências herdadas por todas as crianças. Isto é especialmente útil quando você tem **um conjunto de projetos*** (ou seja, mais de um) que herda um pai comum.
Outro caso de uso extremamente importante de dependencyManagement
é o controle de versões de artefatos utilizados em dependências transitivas. Isto é difícil de explicar sem um exemplo. Felizmente, isto está ilustrado na documentação.
É como você disse; dependencyManagement
é usado para puxar todas as informações de dependência para um arquivo POM comum, simplificando as referências no arquivo POM infantil.
Torna-se útil quando você tem múltiplos atributos que você não quer reinserir sob múltiplos projetos infantis.
Finalmente, dependencyManagement
pode ser utilizado para definir uma versão padrão de um artefato a ser utilizado em vários projetos.
No Eclipse, há mais uma característica no dependencyManagement
. Quando a dependência
é utilizada sem ela, as dependências infundadas são notadas no arquivo pom. Se o dependencyManagement
for utilizado, as dependências não resolvidas permanecem despercebidas no arquivo pom e os erros aparecem apenas nos arquivos java. (importações e tais...)