Maven Dependency Plugin

Maven, la herramienta de automatización de compilación ampliamente utilizada para proyectos Java, ofrece una gran cantidad de complementos que agilizan el proceso de desarrollo. Entre ellos, Maven Dependency Plugin se destaca como una herramienta crucial para gestionar las dependencias de proyectos. En este artículo, profundizaremos en las complejidades del plugin, sus Goals, configuración y brindaremos ejemplos prácticos.

Descripción general

Maven Dependency Plugin sirve como un activo valioso para gestionar las dependencias del proyecto, incluida la resolución, copia y análisis de dependencias. Ofrece una variedad de objetivos que permiten manejar eficazmente las dependencias dentro de sus proyectos, garantizando así un proceso de desarrollo fluido y eficiente.

Goals de Maven Dependency Plugin

Maven Dependency Plugin abarca varios objetivos clave que satisfacen los diversos requisitos de los desarrolladores Java. Estos objetivos incluyen:

  • dependency:analyze: examina las dependencias del proyecto e identifica aquellas que son: utilizadas y declaradas; usado y no declarado; o declarado pero sin uso. Este comando está diseñado para usarse de forma independiente, por lo que siempre ejecuta la fase de prueba y compilación.
  • dependency:analyze-dep-mgt: mojo examina las dependencias después de que finalmente se hayan resuelto e identifica cualquier discrepancia en su sección de gestión de dependencias. Este mojo también es útil para identificar proyectos que anulan directamente la gestión de dependencias. Para detectar estas situaciones típicas, establezca ignoreDirect en falso.
  • dependency:analyze-duplicate: Analiza las etiquetas y en pom.xml y determina las dependencias declaradas duplicadas.
  • dependency:analyze-only: analiza las dependencias del proyecto e identifica aquellas que se usan y declaran, las que se usan y no declaran, y las que no se usan y declaran. Este comando está diseñado para usarse dentro del ciclo de vida de la compilación, suponiendo que se haya ejecutado la fase de prueba y compilación. Cuando se ejecuta de forma independiente, se recomienda utilizar el comando «dependency:analyze».
  • dependency:analyze-report: se utiliza para analizar las dependencias del proyecto y generar un informe completo que resume los tipos de dependencias, incluidas aquellas que se usan y declaran, las que se usan y no declaran, y las que no se usan y declaran.
  • dependency:build-classpath: genera una cadena de dependencias de classpath desde el repositorio local y la envía a un archivo o registro.
  • dependency:collect: se utiliza para recopilar las dependencias del proyecto del repositorio. Depende de Maven 3.0 o superior para su funcionamiento, ya que utiliza ‘requiresDependencyCollection’. Esto da como resultado la lista de información de groupId:artifactId:version al descargar los archivos pom sin recuperar los artefactos reales, como los archivos jar.
  • dependency:copy: este objetivo se utiliza para copiar dependencias de un repositorio a una ubicación específica.
  • dependency:copy-dependencies: es un objetivo que mueve las dependencias del proyecto desde el repositorio a una ubicación específica.
  • dependency:display-ancestors: muestra todos los POM ancestros del proyecto. Esto puede resultar valioso en un sistema de integración continua cuando necesita identificar todos los POM principales del proyecto.
  • dependency:get: resuelve un artefacto individual, que potencialmente incluye dependencias transitivas, de los repositorios remotos designados. Nota: siempre verificará el repositorio central definido en el super POM.
  • dependency:go-offline: es un objetivo que resuelve todas las dependencias del proyecto, junto con complementos e informes, y sus respectivas dependencias.
  • dependency:help: se utiliza para mostrar información de ayuda sobre maven-dependecy-plugin. Puede llamar a «mvn dependency:help -Ddetail=true -Dgoal=» para mostrar detalles de los parámetros.
  • dependency:list: muestra la lista de dependencias asociadas con este proyecto.
  • dependency:list-classes: recupera y enumera todas las clases encontradas en el artefacto especificado de los repositorios remotos designados.
  • dependency:list-repositories: es un objetivo que reúne todas las dependencias del proyecto y luego muestra los repositorios utilizados por la compilación y por las dependencias transitivas.
  • dependency:properties: es responsable de asignar una propiedad que dirige al archivo de artefacto para cada dependencia del proyecto. Esto implica establecer una propiedad de proyecto para cada dependencia (tanto directa como transitiva) siguiendo el formato de groupId:artifactId:type:[classifier] y que contiene la ruta al artefacto resuelto.
  • dependency:purge-local-repository: es un objetivo que, cuando se ejecuta en un proyecto, elimina las dependencias del proyecto del repositorio local y, si se desea, las vuelve a resolver. Cuando se usa fuera de un proyecto, elimina las dependencias especificadas manualmente.
  • dependency:resolve: este objetivo facilita la resolución de las dependencias del proyecto, asegurando que todas las dependencias requeridas se recuperen y estén disponibles para el proceso de compilación del proyecto.
  • dependency:resolve-plugins: es un objetivo diseñado para resolver todos los complementos, informes y dependencias del proyecto.
  • dependency:sources: tiene como objetivo resolver las dependencias de archivos fuente del proyecto desde el repositorio.
  • dependency:tree: permite visualizar el árbol de dependencias del proyecto, proporcionando información sobre la jerarquía y las relaciones entre las dependencias.
  • dependency:unpack: Objetivo que recupera una lista de artefactos del repositorio y los descomprime en una ubicación definida.
  • dependencia:unpack-dependencies: Objetivo que descomprime las dependencias del proyecto desde el repositorio a una ubicación definida.

Configuración de Maven Dependency Plugin

Para aprovechar las capacidades de Maven Dependency Plugin, es imperativa una configuración bien definida. La configuración del complemento se administra principalmente dentro del archivo POM (Modelo de objetos del proyecto) del proyecto mediante la especificación de la configuración y los objetivos del complemento.

A continuación se muestra un ejemplo de la configuración del plugin dentro del archivo POM:

<project>
  ...
  <build>
    <plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-dependency-plugin</artifactId>
			<version>3.6.1</version>
			<executions>
				<execution>
					<id>copy</id>
					<phase>package</phase>
					<goals>
						<goal>copy</goal>
					</goals>
				</execution>
			</executions>
			<configuration>
				<artifactItems>
					<artifactItem>
						<groupId>junit</groupId>
						<artifactId>junit</artifactId>
						<version>4.13.1</version>
						<type>jar</type>
						<overWrite>false</overWrite>
						<outputDirectory>${project.build.directory}/lib</outputDirectory>
					</artifactItem>
				</artifactItems>
				<outputDirectory>${project.build.directory}/wars</outputDirectory>
				<overWriteReleases>false</overWriteReleases>
				<overWriteSnapshots>true</overWriteSnapshots>
			</configuration>
		</plugin>
    </plugins>
  </build>
  ...
</project>

En esta configuración, el complemento se utiliza para copiar un artefacto específico en un directorio de salida designado. Analicemos la configuración y comprendamos cómo funciona:

  • El complemento se define con las siguientes coordenadas:
    • Group ID: org.apache.maven.plugins
    • Artifact ID: maven-dependency-plugin
    • Version: 3.6.1.
  • El complemento está configurado para ejecutarse durante la fase de package del ciclo de vida de Maven. Esto significa que la copia del artefacto se realizará automáticamente cuando ejecute el comando mvn package.
  • El complemento se configura con una única ejecución, identificada por el ID copy. Esta ejecución tiene un único objetivo, que es copy.
  • La sección configuration del complemento contiene los detalles específicos del artefacto que se va a copiar. En este caso, el artefacto se define utilizando el elemento artifactItems, que contiene la siguiente información:
    • Group ID: junit
    • Artifact ID: junit
    • Version: 4.13.1
    • Type: jar
    • Overwrite: false (Los archivos existentes no se sobrescribirán.)
    • Output directory: ${project.build.directory}/lib (el directorio lib dentro del directorio de compilación)
  • Además, la configuración especifica el directorio de salida para todos los artefactos copiados utilizando el elemento outputDirectory. En este caso, el directorio de salida es ${project.build.directory}/wars (el directorio wars dentro del directorio de compilación)
  • La configuración también incluye dos propiedades booleanas:
    • overWriteReleases: está configurado en false, lo que significa que los artefactos de releases existentes no se sobrescribirán.
    • overWriteSnapshots: está configurado en true, lo que significa que los artefactos de snapshots existentes se sobrescribirán.

Ver el árbol de dependencias

Considere el siguiente ejemplo de utilización del Goal dependency:tree para visualizar el árbol de dependencias del proyecto:

$
$ mvn dependency:tree
$

Este comando genera una estructura de árbol que representa las dependencias del proyecto, mostrando las relaciones y versiones de cada dependencia.

Conclusión

Maven Dependency Plugin es una herramienta indispensable para los programadores de Java, que ofrece capacidades sólidas para gestionar las dependencias de proyectos. Al aprovechar los objetivos y configuraciones del complemento, los desarrolladores pueden optimizar el manejo de las dependencias, asegurando un proceso de desarrollo eficiente y bien organizado. Con sus características integrales y su perfecta integración con Maven, el complemento de dependencia se erige como una piedra angular en el ámbito de la gestión de proyectos Java.


Te puede interesar