Como obter uma árvore de dependência para um artefato?

123

dependency:treepode ser usado para ver a árvore de dependência de um determinado projeto. Mas o que eu preciso é ver a árvore de dependência para um artefato de terceiros.

Acho que posso criar um projeto vazio, mas estou procurando algo mais fácil (preciso fazer isso para vários artefatos).

IttayD
fonte

Respostas:

158

1) Use o plugin de dependência maven

Crie um projeto simples apenas com pom.xml. Adicione sua dependência e execute:

mvn dependency:tree

Infelizmente, a dependência mojo deve usar pom.xml ou você recebe o seguinte erro:

Não é possível executar o mojo: tree. Requer um projeto com um pom.xml existente, mas a construção não está usando um.

2) Encontre o pom.xml do seu artefato no repositório central do maven

As dependências são descritas no pom.xml do seu artefato. Encontre-o usando a infraestrutura maven.

Vá para http://search.maven.org/ e insira seu groupId e artifactId.

Ou você pode ir para http://repo1.maven.org/maven2/ e navegar primeiro usando os plugins groupId, depois usando artifactId e finalmente usando sua versão.

Por exemplo, consulte org.springframework: spring-core

3) Use o plugin de dependência maven contra seu artefato

Parte do artefato de dependência é um pom.xml. Isso especifica sua dependência. E você pode executar a dependência do mvn: tree neste pom.

amra
fonte
3
Como eu disse, quero evitar a necessidade de criar um projeto
IttayD
você não está 'criando' um projeto, está apenas baixando um arquivo POM.
Sean Patrick Floyd
1
Você não precisa criar um novo projeto. Basta dar uma olhada em seu repositório local e encontrar o atifact pom.xml
amra
Isso não funciona se o módulo filho não existir. Por exemplo, `` mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap-descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10. depen dency: tree [INFO] Verificando projetos ... [ERRO] [ERRO] Alguns problemas foram encontrados ao processar as POMs: [ERRO] Módulo filho ~ / .m2 / repository / org / jboss / shrinkwrap / descritores / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 / api-base de ... / descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10.pom não existe `` ``
Ding-Yi Chen
1
No projeto Maven de vários módulos (ou seja, projeto com vários pom.xmlarquivos), você pode receber um erro. Tente mvn compile dependency:treeentão.
izogfif
49

Se você se incomodar em criar um projeto de amostra e adicionar sua dependência de terceiros, poderá executar o seguinte para ver a hierarquia completa das dependências.

Você pode procurar um artefato específico usando este comando maven:

mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[type]:[version]

De acordo com a documentação:

onde cada segmento de padrão é opcional e suporta curingas completos e parciais *. Um segmento de padrão vazio é tratado como um curinga implícito.

Imagine que você está tentando encontrar o arquivo jar 'log4j-1.2-api' entre os diferentes módulos do seu projeto:

mvn dependency:tree -Dverbose -Dincludes=org.apache.logging.log4j:log4j-1.2-api

mais informações podem ser encontradas aqui .

Edit: Observe que, apesar das vantagens de usar o parâmetro detalhado , ele pode não ser tão preciso em algumas condições. Porque ele usa o algoritmo Maven 2 e pode dar resultados errados quando usado com o Maven 3.

Kayvan Tehrani
fonte
2
Ótima sugestão! -Dverbosefoi o suficiente para me mostrar a árvore completa que eu precisava. Canalizando a saída para lessou similar e fazer uma busca rápida funciona muito bem se você não consegue lembrar a includesbandeira ou não querem fornecer o completo ou wildcarded groupId:)
jocull
Isso não está funcionando sem um presente pom.xml que contém o artefato que você está visualizando. Caso contrário, você recebe[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:tree (default-cli): Goal requires a project to execute but there is no POM in this directory (...). Please verify you invoked Maven from the correct directory. -> [Help 1]
Eisenknurr 10/04/19
-Dverbose foi preterido no plug-in de dependência, portanto isso não funciona mais, a menos que você esteja usando uma versão bastante antiga.
toolforger
6

A solução é chamar dependency: tree com o arquivo pom.xml do artefato:

mvn -f "$HOME/.m2/repository/$POM_PATH" dependency:tree

Consulte também Como listar as dependências transitivas de um artefato de um repositório?

Matthias M
fonte
Isso pode não funcionar com artefatos baixados de um repositório central, devido a 'distributionManagement.status'. É adicionado pelo repositório central no upload. E isso tornará dependência: a árvore falha na validação do arquivo pom. Veja Issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen
2

Se você usar uma versão atual do m2eclipse (que deveria usar se usar eclipse e maven):

Selecione a entrada do menu

Navigate -> Open Maven POM

e insira o artefato que você está procurando.

O pom será aberto no editor do pom, no qual você pode selecionar a guia Dependency Hierarchypara visualizar a hierarquia de dependências (como o nome sugere :-))

Sean Patrick Floyd
fonte
2
OK, então esta resposta é para outros usuários :-)
Sean Patrick Floyd
1

Se o seu artefato não for uma dependência de um determinado projeto, sua melhor aposta é usar um mecanismo de pesquisa de repositório . Muitos deles descrevem as dependências de um determinado artefato.

Pascal Thivent
fonte
os artefatos em que estou interessado fazem parte de um produto da empresa
IttayD
Receio que a resposta de Amra seja sua melhor aposta.
Sean Patrick Floyd
@IttayD: Por que você não menciona esse tipo de detalhe importante em sua pergunta? Isso ajudaria a obter melhores respostas ao IMHO (e também poderia ajudar os leitores a não perder tempo).
Pascal Thivent
0

Se você deseja obter uma representação gráfica e pesquisável da árvore de dependência (incluindo todos os módulos do seu projeto, dependências transitivas e informações de despejo), consulte UpdateImpact: https://app.updateimpact.com (serviço gratuito).

Isenção de responsabilidade: sou um dos desenvolvedores do site

adamw
fonte
0

Eu sei que este post é bastante antigo, mas ainda assim, se alguém usando o IntelliJ quiser ver a árvore de dependência diretamente no IDE, poderá instalar o Maven Helper Plugin in do .

Uma vez instalado, abra o pom.xml e você poderá ver a guia Analise de Dependências, como abaixo. Ele também fornece a opção de ver a dependência que está em conflito apenas e também como uma estrutura em árvore.

insira a descrição da imagem aqui

rns
fonte