Maven en tu flujo de trabajo de CI/CD: guía para mejorar tus procesos de desarrollo
Maven en tu flujo de trabajo de CI/CD: guía para mejorar tus procesos de desarrollo En el mundo actual del desarrollo de software, la integración…
Apache Maven está diseñado para crear compilaciones portátiles que se espera que funcionen en diferentes plataformas y en varios entornos de tiempo de ejecución.
Puede haber situaciones en las que necesite construir el mismo proyecto de manera diferente. Por ejemplo, es posible que deba crear un proyecto de manera diferente con el fin de la puesta en escena y la producción. Es posible que no desee crear un proyecto que requiera una biblioteca de Linux en Windows, etc.
Para abordar estas circunstancias, Apache Maven admite perfiles de compilación. Como tal, los perfiles pueden conducir fácilmente a diferentes resultados de compilación de diferentes miembros de nuestro equipo. Sin embargo, si se usan correctamente, los perfiles se pueden usar mientras se preserva la portabilidad del proyecto.
Existen diferentes tipos de perfiles que podemos emplear en Apache Maven:
pom.xml%USER_HOME%/.m2/settings.xml${maven.home}/conf/settings.xmlAl crear diferentes perfiles para diferentes variaciones de la compilación del proyecto, puede usar el mismo archivo pom para crear diferentes compilaciones. Se debe tener cuidado para asegurarse de que esto no resulte en una compilación no portátil.
Hay dos formas de crear un perfil: en el archivo pom del proyecto o en el archivo de configuración. Es importante tener en cuenta que, si un perfil está activo desde el archivo de configuración, sus valores anularán cualquier perfil con ID equivalentes en el archivo pom.
pom.xmlEl perfil en el archivo pom.xml puede tener los siguientes elementos:
<profile>
<id>...</id>
<activation>...</activation>
<build>
<defaultGoal>...</defaultGoal>
<finalName>...</finalName>
<resources>...</resources>
<testResources>...</testResources>
<plugins>...</plugins>
</build>
<modules>...</modules>
<dependencies>...</dependencies>
<dependencyManagement>...</dependencyManagement>
<distributionManagement>...</distributionManagement>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<properties>...</properties>
<reporting>...</reporting>
</profile>
settings.xmlEl perfil en el archivo settings.xml solo puede tener los siguientes elementos:
<profile>
<id>...</id>
<activation>...</activation>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<properties>...</properties>
</profile>
Veamos en la práctica cómo trabajar con los perfiles. Creemos primero un proyecto Maven con el comando:
mvn archetype:generate -DgroupId=com.example -DartifactId=maven-profiles-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Luego agreguemos un perfil al proyecto agregando las siguientes líneas al pom del mismo:
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<environment>development</environment>
</properties>
</profile>
</profiles>
Una vez agregadas estas líneas vamos a dirigirnos dentro de la carpeta del proyecto y vamos a ejecutar el siguiente comando para poder ver los perfiles activos:
mvn help:active-profiles
Si es la primera vez que ejecutamos el comando veremos como se descargan una serie de archivos necesarios.
Podemos observar como no tenemos perfiles activos precisamente porque la etiqueta activeByDefault está como false. Cambiemos la etiqueta a true y volvamos a ejecutar el comando.
Observemos ahora como nos muestra como activo el perfil que hemos agregado al pom que en este caso le hemos llamado dev.
Los perfiles se pueden activar de varias maneras. A continuación explicaremos algunas de ellas:
mvn package -P dev
settings.xml configurando los perfiles que deseamos que estén activos de la siguiente manera:<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
<profile>
<activation>
<os>
<family>Windows</family>
</os>
</activation>
...
</profile>
-Denvironment=production en la línea de comandos:<profile>
<id>production</id>
<activation>
<property>
<name>environment</name>
<value>production</value>
</property>
</activation>
<properties>
<db.url>jdbc:mysql://prod-server:3306/mydb</db.url>
</properties>
</profile>
Para activarlo ejecutaríamos:
mvn package -Denvironment=production
! antes del nombre de la propiedad:<profile>
<id>default-config</id>
<activation>
<property>
<name>!skipDefaults</name>
</property>
</activation>
...
</profile>
Este perfil estará activo siempre que no se pase -DskipDefaults en la línea de comandos.
En ocasiones es necesario desactivar un perfil que está activo por defecto o que se activa automáticamente. Para ello, Maven permite usar el prefijo ! o - antes del nombre del perfil en la línea de comandos:
mvn package -P !dev
Este comando ejecutará la fase package asegurándose de que el perfil dev no esté activo, incluso si tiene activeByDefault configurado como true.
Maven permite activar varios perfiles al mismo tiempo separándolos por comas:
mvn package -P dev,integration
Esto resulta útil cuando se necesitan combinar configuraciones. Por ejemplo, un perfil dev podría definir la base de datos de desarrollo, mientras que un perfil integration podría agregar dependencias de pruebas de integración. Ambos se aplicarán en orden y sus propiedades se combinarán.
También es posible mezclar activaciones y desactivaciones en el mismo comando:
mvn package -P integration,!dev
Al trabajar con perfiles en Apache Maven, es importante seguir ciertas prácticas para mantener la calidad y portabilidad de nuestros proyectos:
pom.xml para explicar cuándo y por qué se debe usar cada perfil.pom:<profiles>
<profile>
<id>dev</id>
<properties>
<db.url>jdbc:mysql://localhost:3306/devdb</db.url>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<db.url>jdbc:mysql://prod-server:3306/proddb</db.url>
</properties>
</profile>
</profiles>
activeByDefault en múltiples perfiles: Si más de un perfil tiene activeByDefault como true, todos se activarán simultáneamente, lo cual puede causar conflictos inesperados. Limite su uso a un solo perfil por defecto.-Dproperty=value) es la más explícita y predecible. Hace evidente en el comando de compilación qué configuración se está utilizando.mvn help:active-profiles.mvn help:active-profiles: Este comando es indispensable para depurar problemas relacionados con perfiles. Muestra exactamente qué perfiles están activos y por qué.Los perfiles en Apache Maven son una herramienta poderosa para manejar diferentes configuraciones de compilación dentro de un mismo proyecto. Permiten adaptar el comportamiento de Maven según el entorno, el sistema operativo o las necesidades específicas del equipo de desarrollo, todo sin sacrificar la portabilidad del proyecto.
La clave está en usarlos con moderación y siguiendo buenas prácticas: documentar su propósito, evitar romper la compilación base y preferir mecanismos de activación explícitos. Con estos principios, los perfiles se convierten en un aliado fundamental para gestionar proyectos Maven en entornos profesionales.