Hay algo en lo que es excelente maven: descargar dependencias, el problema reside en que no todas las dependencias están en algún repositorio de maven. En esta ocasión te enseñaré el escenario más complejo sobre como descargar dependencias y agregarlas a tu compilación usando únicamente maven.
Maven es una herramienta de automatización enfocada en la integración continua que precede a la cultura devOps. Uno de sus propósitos clave siempre ha sido el estandarizar el manejo de versiones de dependencias y permitir realizar tareas de manera automatizada basándose en cierta configuración: el archivo pom.xml.
Antes que anda es una herramienta que tiene décadas de experiencia, con todo el poder de Java, lenguaje en el que está programado y además representa un estándar muy difícil de superar en la comunidad de desarrollo. Adicional a esto existen algunas tareas o procesos que requieren que se maneje todo el ciclo de vida enteramente con Maven para garantizar que lo que se distribuye es totalmente portable y seguro.
El escenario más complejo que me he enfrentado es:
Es importante hacer notar que dicho proyecto es un proyecto multimódulo, en donde cada módulo puede ser:
Para ello abordaré cada problema en particular para demostrar como lo resolví.
Para ello me valí de el plugin llamado wagon-maven-plugin. Este recibe como parámetros:
Esto en código se ve así:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.2</version>
<executions>
<execution>
<id>downloadIC</id>
<phase>validate</phase>
<goals><goal>download-single</goal></goals>
<configuration>
<url>https://www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/idea/ideaIC/${idea.version}/</url>
<fromFile>ideaIC-${idea.version}.zip</fromFile>
<toFile>${project.basedir}/client-idea/lib/ideaIC-${idea.version}.zip</toFile>
<skipIfExists>true</skipIfExists>
</configuration>
</execution>
</executions>
</plugin> Eso nos lleva a un pequeño problema, que es que cada plugin que se defina a nivel padre se ejecuta una vez por cada hijo, así que deberemos sobreescribir en todos los lugares que no queramos que se ejecute de la siguiente manera
<!-- disable IDEA downloading for this module -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.2</version>
<executions>
<execution>
<id>downloadIC</id>
<phase/>
</execution>
</executions>
</plugin> Como el paso anterior nos descarga nuestras dependencia ahora toca extraerla usando el plugin maven-antrun-plugin.
El plugin maven-antrun-plugin nos permite ejecutar tareas usando Ant. Ant es otro sistema anterior a maven muchísimo más configurable pero más complejo y menos estandarizado.
A este plugin le podemos especificar:
En código nos quedaría así:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>prepare</id>
<phase>validate</phase>
<configuration>
<target>
<echo message="unzipping file ${project.basedir}/client-idea/lib/ideaIC-${idea.version}.zip to ${project.basedir}/client-idea/lib" />
<unzip src="${project.basedir}/client-idea/lib/ideaIC-${idea.version}.zip" dest="${project.basedir}/client-idea/lib" overwrite="false" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin> cabe mencionar que se ejecuta en la fase validate, es decir al terminar las tareas del padre y justo antes de empezar a ejecutar las tareas del hijo.
Esta tarea ya es relativamente más fácil, se trata de registrar mediante el ámbito de sistema una dependencia, especificando la ubicación relativa de nuestro jar. Esto ya se peude realizar en los hijos de nuestro proyecto multimódulo en donde necesitemos las dependencias
El código se ve así:
<dependency>
<groupId>com.jetbrains</groupId>
<artifactId>util</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${idea.systemPath}/lib/util.jar</systemPath>
</dependency> De esta manera no solamente usamos maven para descargar dependencias, sino que nos encargamos de otras tareas de una manera que estamos seguros que funcionará en prácticamente todas las plataformas que soporten Java, y es allí donde todo este esfuerzo vale la pena. Es muy importante recalcar que para que este truco funcione se debe hacer el proyecto multimódulo y poner los plugins para descargar en el pom del padre.
Te comparto aquí mis recomendaciones de cursos de Código Facilito. Codigofacilito.com es una plataforma virtual…
Te comparto aquí mis recomendaciones de cursos de Linkedin Learning. LinkedIn Learning es una plataforma…
Estos snippets de código para entrevista acerca de mockito espero te sean de mucha utilidad.…
En este tutorial aprenderá a usar expresiones regulares en Java de manera práctica para contar…
¿Entrevista de programación Java fullstack? No te preocupes, te tengo un compendio de preguntas de…
Te recomiendo algunos cursos de Udemy para mejorar tus softskills y así mejorar en tu…