¿Cómo obtener un árbol de dependencia para un artefacto?

123

dependency:treese puede usar para ver el árbol de dependencias para un proyecto determinado. Pero lo que necesito es ver el árbol de dependencias para un artefacto de terceros.

Creo que puedo crear un proyecto vacío, pero estoy buscando algo más fácil (necesito hacer esto para varios artefactos).

IttayD
fuente

Respuestas:

158

1) Use el complemento de dependencia maven

Cree un proyecto simple solo con pom.xml. Agregue su dependencia y ejecute:

mvn dependency:tree

Desafortunadamente, mojo de dependencia debe usar pom.xml o obtendrá el siguiente error:

No se puede ejecutar mojo: árbol. Requiere un proyecto con un pom.xml existente, pero la compilación no está usando uno.

2) Encuentra pom.xml de tu artefacto en el repositorio central de maven

Las dependencias se describen en pom.xml de su artefacto. Encuéntralo usando la infraestructura de Maven.

Vaya a http://search.maven.org/ e ingrese su groupId y artifactId.

O puede ir a http://repo1.maven.org/maven2/ y navegar primero usando plugins groupId, luego usando artifactId y finalmente usando su versión.

Por ejemplo, vea org.springframework: spring-core

3) Use el complemento de dependencia de Maven contra su artefacto

Parte del artefacto de dependencia es un pom.xml. Eso especifica que es dependencia. Y puede ejecutar la dependencia mvn: árbol en este pom.

amra
fuente
3
Como dije, quiero evitar la necesidad de crear un proyecto
IttayD
no estás 'creando' un proyecto, solo estás descargando un archivo POM.
Sean Patrick Floyd el
1
No tiene que crear un nuevo proyecto. Solo eche un vistazo a su repositorio local y encuentre pom.xml del
atifact
Esto no funciona si el módulo secundario no existe. por ejemplo, `` `mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap-descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10. dependencia de pom: árbol [INFO] Explorando proyectos ... [ERROR] [ERROR] Se encontraron algunos problemas al procesar los POM: [ERROR] Módulo secundario ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / 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 no existe `` `
Ding-Yi Chen
1
Para el proyecto Maven de varios módulos (es decir, proyecto con varios pom.xmlarchivos), puede obtener un error. Intenta mvn compile dependency:treeentonces.
izogfif
49

Si se molesta en crear un proyecto de muestra y agregarle su dependencia de terceros, puede ejecutar lo siguiente para ver la jerarquía completa de las dependencias.

Puede buscar un artefacto específico utilizando este comando maven:

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

De acuerdo con la documentación:

donde cada segmento de patrón es opcional y admite comodines completos y parciales *. Un segmento de patrón vacío se trata como un comodín implícito.

Imagine que está tratando de encontrar el archivo jar 'log4j-1.2-api' entre los diferentes módulos de su proyecto:

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

Más información se puede encontrar aquí .

Editar: Tenga en cuenta que, a pesar de las ventajas de usar el parámetro detallado , puede que no sea tan preciso en algunas condiciones. Porque usa el algoritmo Maven 2 y puede dar resultados incorrectos cuando se usa con Maven 3.

Kayvan Tehrani
fuente
2
Gran sugerencia! -Dverbosefue suficiente para mostrarme el árbol completo que necesitaba. Canalizar la salida ao lesssimilar y hacer una búsqueda rápida funciona muy bien si no puede recordar la includesbandera o no desea proporcionar el carácter completo o comodín groupId:)
jocull
Esto no funciona sin un presente pom.xml que contiene el artefacto que está viendo. De lo contrario se obtiene[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
-Dverbose ha quedado en desuso en el complemento de dependencia, por lo que ya no funciona a menos que esté utilizando una versión bastante antigua.
Toolforger
6

La solución es llamar a dependencia: árbol con el archivo pom.xml del artefacto:

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

Consulte también ¿Cómo enumerar las dependencias transitivas de un artefacto de un repositorio?

Matthias M
fuente
Esto podría no funcionar con artefactos descargados de un repositorio central, debido a 'distributionManagement.status'. Es agregado por el repositorio central en la carga. Y esto hará que la dependencia: árbol de validación de error en el archivo pom. Ver issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen
2

Si usa una versión actual de m2eclipse (que debería usar si usa eclipse y maven):

Seleccione la entrada del menú

Navigate -> Open Maven POM

e ingrese el artefacto que está buscando.

El pom se abrirá en el editor de pom, desde el cual puede seleccionar la pestaña Dependency Hierarchypara ver la jerarquía de dependencia (como su nombre indica :-))

Sean Patrick Floyd
fuente
2
OK, entonces esta respuesta es para otros usuarios :-)
Sean Patrick Floyd
1

Si su artefacto no es una dependencia de un proyecto determinado, su mejor opción es utilizar un motor de búsqueda de repositorio . Muchos de ellos describen las dependencias de un artefacto dado.

Pascal Thivent
fuente
los artefactos que me interesa son parte de un producto de la empresa
IttayD
entonces la respuesta de amra es tu mejor apuesta, me temo.
Sean Patrick Floyd
@IttayD: ¿Por qué no mencionas este tipo de detalles importantes en tu pregunta? Esto ayudaría a obtener mejores respuestas en mi humilde opinión (y también podría ayudar a los lectores a no perder el tiempo).
Pascal Thivent
0

Si desea obtener una representación gráfica y de búsqueda del árbol de dependencias (incluidos todos los módulos de su proyecto, dependencias transitivas e información de desalojo), consulte UpdateImpact: https://app.updateimpact.com (servicio gratuito).

Descargo de responsabilidad: soy uno de los desarrolladores del sitio

adamw
fuente
0

Sé que esta publicación es bastante antigua, pero aún así, si alguien que usa IntelliJ quiere ver el árbol de dependencias directamente en IDE, puede instalar el complemento Maven Helper Plugin .

Una vez instalado, abra pom.xml y podrá ver la pestaña Análisis de dependencia como se muestra a continuación. También ofrece la opción de ver la dependencia que solo está en conflicto y también como una estructura de árbol.

ingrese la descripción de la imagen aquí

rns
fuente