Gestión de Proyectos Java con Apache Maven

Apache Maven es una herramienta fundamental en el ecosistema Java, diseñada para automatizar la construcción, gestión de dependencias y el ciclo de vida de las aplicaciones. Se basa en el concepto del Project Object Model (POM), permitiendo que la configuración del proyecto se defina en un archivo XML centralizado.

Componentes Fundamentales

  • POM (Project Object Model): El archivo pom.xml que contiene la descripción del proyecto y sus configuraciones.
  • Ciclos de Vida: Secuencias de fases que definen el orden de ejecución (ej. clean, compile, test, package).
  • Gestión de Dependencias: Un sistema para descargar y gestionar bibliotecas externas automáticamente desde repositorios.
  • Plugins: Extensiones que ejecutan tareas específicas durante las fases del ciclo de vida.

Comandos Esenciales en la Terminal

Comando Propósito
mvn compile Transforma el código fuente (Java) en archivos de clase (bytecode).
mvn test Ejecuta las pruebas unitarias utilizando frameworks como JUnit o TestNG.
mvn package Empaqueta el código compilado en su formato de distribución (JAR, WAR, EAR).
mvn install Instala el paquete generado en el repositorio local (~/.m2/repository).
mvn deploy Sube el artefacto final a un repositorio remoto para compartirlo con el equipo.
mvn clean Elimina el directorio target, limpiando los resultados de construcciones previas.

Alcance de las Dependencias (Scope)

El elemento <scope> determina cuándo una biblioteca debe incluirse en el classpath:

  • compile: Alcance predeterminado. Disponible en todas las fases.
  • test: Solo disponible durante la compilación y ejecución de pruebas.
  • runtime: Necesaria para la ejecución, pero no para la compilación del código.
  • provided: Se espera que el contenedor (ej. Tomcat) proporcione la dependencia en tiempo de ejecución.
  • system: Similar a provided, pero requiere una ruta absoluta al archivo JAR en el sistema local.

Estructura Típica de un pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.empresa.proyecto</groupId>
   <artifactId>modulo-servicios</artifactId>
   <version>1.2.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <properties>
       <maven.compiler.source>17</maven.compiler.source>
       <maven.compiler.target>17</maven.compiler.target>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

   <dependencies>
       <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
           <version>2.0.7</version>
       </dependency>
       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <version>1.18.28</version>
           <scope>provided</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.11.0</version>
           </plugin>
       </plugins>
   </build>
</project>

Gestión de Versiones: Release vs Snapshot

Maven diferencia estrictamente entre versiones en desarrollo y versiones estables:

  • SNAPSHOT: Indica una versión en desarrollo (ej. 1.0-SNAPSHOT). Maven permite sobrescribir estos artefactos en el repositorio cada vez que se despliegan.
  • RELEASE: Una versión final y estable (ej. 1.0.0). Una vez desplegada, no debe modificarse. Intentar subir una versión Release ya existente suele provocar un error 400 (Conflict) en gestores como Nexus.

Instalación Manual de Artefactos Externos

Si dispone de un archivo JAR privado que no está en un repositorio público, puede integrarlo manualmente a su repositorio local con el siguiente comando:

mvn install:install-file \
   -Dfile="ruta/del/archivo-externo.jar" \
   -DgroupId="com.libreria.privada" \
   -DartifactId="utilidades-core" \
   -Dversion="2.5.0" \
   -Dpackaging=jar \
   -DgeneratePom=true

Configuración de Despliegue Remoto

Para habilitar mvn deploy, es necesario configurar las credenciales en el archivo settings.xml de su instalación de Maven (o en ~/.m2/settings.xml):

<server>
   <id>repositorio-corporativo</id>
   <username>admin</username>
   <password>token_seguro</password>
</server>

Luego, defina el destino en el pom.xml del proyecto:

<distributionManagement>
   <repository>
       <id>repositorio-corporativo</id>
       <url>https://nexus.miempresa.com/repository/maven-releases/</url>
   </repository>
   <snapshotRepository>
       <id>repositorio-corporativo</id>
       <url>https://nexus.miempresa.com/repository/maven-snapshots/</url>
   </snapshotRepository>
</distributionManagement>

Es crucial que el id coincida entre el settings.xml y el pom.xml para que la autenticación sea exitosa.

Etiquetas: maven java Build Tools DevOps Backend Development

Publicado el 7-5 05:52