10 - Distribución y despliegue

Objetivo del tema

En este tema aprenderás a generar artefactos JAR y WAR, desplegarlos en repositorios remotos, trabajar con repositorios privados y gestionar versiones SNAPSHOT frente a versiones liberadas usando Apache Maven.

10.1 Generar archivos JAR (mvn package)

El plugin maven-jar-plugin empaqueta las clases compiladas en un archivo JAR cuando la fase package concluye. La configuración básica depende del tipo de proyecto y se puede extender para incluir metadatos propios.

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.3.0</version>
      <configuration>
        <archive>
          <manifest>
            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>
  • Ejecuta mvn clean package para crear el JAR en target/<artifactId>-<version>.jar.
  • Añade la clase principal con <mainClass> para generar JARs ejecutables.
  • Utiliza plugins como maven-shade-plugin si necesitas empaquetar dependencias en un fat JAR.

10.2 Generar archivos WAR para aplicaciones web

Los proyectos web deben declarar <packaging>war</packaging>. Maven usará maven-war-plugin para empaquetar la aplicación con estructura estándar.

<project ...>
  <packaging>war</packaging>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.4.0</version>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
  • El WAR resultante se almacena en target/<artifactId>-<version>.war.
  • Incluye recursos en src/main/webapp y archivos de configuración como WEB-INF/web.xml si son necesarios.
  • Para proyectos Spring Boot, el plugin spring-boot-maven-plugin genera WAR o JAR ejecutables según la configuración.

10.3 Subir artefactos a repositorios remotos (mvn deploy)

El comando mvn deploy ejecuta la fase deploy, instalando el artefacto en un repositorio remoto definido en el POM o en settings.xml. Es habitual utilizar herramientas como Nexus Repository o Artifactory.

<distributionManagement>
  <repository>
    <id>releases</id>
    <url>https://repo.miempresa.com/releases</url>
  </repository>
  <snapshotRepository>
    <id>snapshots</id>
    <url>https://repo.miempresa.com/snapshots</url>
  </snapshotRepository>
</distributionManagement>
  • Define credenciales en settings.xml dentro de la sección <servers> para los IDs releases y snapshots.
  • Ejecuta mvn -Pdeploy clean deploy si deseas activar perfiles específicos para la publicación.
  • Configura firmas PGP cuando publiques artefactos en repositorios públicos.

10.4 Uso de repositorios privados (Nexus, Artifactory)

Los repositorios privados permiten controlar el acceso a dependencias internas y mantener artefactos corporativos. Se definen en la sección <repositories> del POM o en settings.xml.

  • Configura proxies y espejos para optimizar la descarga de dependencias externas.
  • Segmenta repositorios por tipo: librerías liberadas, SNAPSHOTs y artefactos de terceros auditados.
  • Establece políticas de retención para evitar crecimiento indefinido del almacenamiento.

Gestionar estos repositorios con soluciones como Nexus Repository o Artifactory permite auditar versiones, permisos y flujos de aprobación.

10.5 Versionado y snapshots (SNAPSHOT vs versiones liberadas)

Maven diferencia las versiones de desarrollo (SNAPSHOT) de las versiones liberadas. Los SNAPSHOT se sobrescriben con cada publicación, mientras que las versiones liberadas son inmutables.

  • Usa sufijos -SNAPSHOT mientras el desarrollo está en curso para compartir avances frecuentes.
  • Al liberar, actualiza el POM a una versión fija (por ejemplo, 1.0.0) y etiqueta el commit en el control de versiones.
  • Considera herramientas como maven-release-plugin para automatizar el proceso de liberación y actualizar SNAPSHOT a versiones definitivas.

Adoptar una estrategia clara de versionado evita confusiones en equipos distribuidos y asegura que los artefactos desplegados sean reproducibles.

Resumen didáctico

Maven facilita la generación de artefactos JAR y WAR, la publicación en repositorios remotos y la administración de versiones. Al combinar configuraciones de distributionManagement, repositorios privados y políticas de SNAPSHOT vs liberados, es posible establecer flujos de despliegue confiables para equipos profesionales.