7 - Perfiles y configuraciones avanzadas

Objetivo del tema

En este tema descubrirás cómo Apache Maven permite adaptar la construcción mediante perfiles, configurar entornos diferenciados, gestionar propiedades personalizadas, utilizar settings.xml y controlar dependencias según el perfil activo.

7.1 Uso de perfiles (<profiles>) en Maven

Los perfiles agregan configuraciones condicionales que se activan según parámetros, sistemas operativos, propiedades o comandos. La guía oficial sobre perfiles describe todas las opciones disponibles en la introducción a profiles.

<profiles>
  <profile>
    <id>produccion</id>
    <activation>
      <property>
        <name>entorno</name>
        <value>prod</value>
      </property>
    </activation>
    <properties>
      <app.mode>production</app.mode>
    </properties>
  </profile>
</profiles>
  • Se activan con mvn package -Dentorno=prod o mediante el flag -P apuntando al identificador.
  • Pueden redefinir propiedades, dependencias, plugins y recursos sin duplicar el POM completo.
  • Los perfiles definidos en el POM se conocen como perfiles de proyecto; también existen perfiles globales en settings.xml.

7.2 Configuración por entorno

Los perfiles permiten crear configuraciones para desarrollo, prueba y producción reutilizando la misma base. Así puedes cambiar URLs, credenciales o parámetros de compilación según el entorno.

  • Define perfiles como dev, qa y prod con propiedades específicas (por ejemplo, la URL de una API).
  • Combina el uso de archivos de recursos con filtros para inyectar valores al construir el artefacto.
  • Activa perfiles automáticamente según el sistema operativo o la presencia de variables de entorno.

Planificar estos perfiles reduce la necesidad de modificar el código fuente entre despliegues.

7.3 Variables y propiedades personalizadas (<properties>)

La sección <properties> centraliza valores reutilizables y facilita su sobreescritura desde perfiles o desde la línea de comandos.

<properties>
  <java.version>17</java.version>
  <spring.version>6.1.5</spring.version>
</properties>
  • Utiliza las propiedades dentro del POM con la sintaxis ${java.version}.
  • Puedes sobreescribirlas al invocar Maven con -Dspring.version=6.2.0 sin editar el archivo.
  • Documenta el significado de cada propiedad para que nuevos integrantes comprendan su impacto.

El uso disciplinado de propiedades minimiza errores al actualizar versiones o cambiar endpoints según el entorno.

7.4 Configuración de settings.xml

El archivo settings.xml permite definir perfiles globales, credenciales, repositorios y proxies fuera del POM. Se ubica en %USERPROFILE%\.m2\settings.xml o ~/.m2/settings.xml. La referencia completa está disponible en la documentación de settings.

<settings>
  <servers>
    <server>
      <id>repositorio-privado</id>
      <username>deployuser</username>
      <password>${env.DEPLOY_PASSWORD}</password>
    </server>
  </servers>
  <proxies>
    <proxy>
      <id>proxy-corporativo</id>
      <active>true</active>
      <protocol>https</protocol>
      <host>proxy.miempresa.com</host>
      <port>8443</port>
    </proxy>
  </proxies>
</settings>
  • Guarda credenciales sensibles en settings.xml y exclúyelo de control de versiones.
  • Utiliza variables de entorno (${env.VARIABLE}) para evitar contraseñas en texto plano.
  • Los perfiles definidos en settings.xml se activan de la misma manera que los del POM, combinando configuraciones de ambos.

7.5 Incluir o excluir dependencias según perfil

Los perfiles también controlan dependencias específicas, permitiendo habilitar librerías extra solo cuando son necesarias.

<profile>
  <id>monitoring</id>
  <activation>
    <activeByDefault>false</activeByDefault>
  </activation>
  <dependencies>
    <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
      <version>1.12.4</version>
    </dependency>
  </dependencies>
</profile>
  • Activa el perfil con mvn package -Pmonitoring para incluir la dependencia opcional.
  • Usa la sección <exclusions> dentro de un perfil para remover dependencias transitivas en escenarios específicos.
  • Documenta qué perfiles deben estar activos en cada entorno para evitar inconsistencias en ejecución.

Gestionar dependencias por perfil evita empaquetar librerías innecesarias y mantiene el artefacto principal ligero.

Resumen didáctico

Los perfiles y propiedades avanzadas de Maven permiten adaptar construcciones a cada contexto sin duplicar proyectos. Con una buena organización de perfiles, propiedades y configuraciones en settings.xml puedes manejar credenciales, proxies, dependencias opcionales y parámetros por entorno manteniendo builds reproducibles.