El concepto de Maven Profiles es uno de los más interesantes de Maven ya que permite generar diferentes perfiles para el despliegue de las aplicaciones que desarrollamos. Es una de las características en las que más nos apoyaremos cuando las aplicaciones ganen en complejidad. Usarlos es muy sencillo , para ello vamos a construir un proyecto Maven con una única clase utilizando Eclipse.
Usamos el asistente y construimos un proyecto que se denomina Maven Profiles , Eclipse genera el código necesario.
Añadimos una clase de servicio al proyecto para no tenerle vacío:
</pre> package com.arquitecturajava; public class Servicio { }
El siguiente paso es crear dos ficheros de properties en la carpeta de recursos:
Ya tenemos nuestra mini aplicación configurada es momento de empaquetarla utilizando mvn package desde un terminal o desde el propio asistente del Eclipse, el resultado nos construirá un jar :
Todo a compilado de forma correcta sin embargo se han copiado ambos ficheros , tanto el de desarrollo como el de producción y nosotros queremos que solo se copie uno.
Maven Profiles
Para conseguir esta operativa con Maven , se utilizan los Maven Profiles que permiten configurar el flujo de Maven dependiendo del perfil que se seleccione.
Vamos a verlo en código:
</p> <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.arquitecturajava</groupId> <artifactId>mavenprofiles</artifactId> <version>1</version> <name>Maven Profiles</name> <description>Ejemplo del uso de Maven Profiles</description> <profiles> <profile> <id>Desarrollo</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>produccion.properties</exclude> </excludes> </resource> </resources> </build> </profile> <profile> <id>Produccion</id> <build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>desarrollo.properties</exclude> </excludes> </resource> </resources> </build> </profile> </profiles> </project> <p class="p1">
Ahora podemos ejecutar mvn package seleccionando el profile (perfil) que deseemos
El JAR que se construya solo incluirá uno de los ficheros:
Hemos conseguido configurar la aplicación dependiendo del perfil. Para utilizar los profiles desde la linea de comandos usaremos mvn -PNombreProfile package
Otros artículos relacionados :
Buen artículo, como muchos otros de esta web relacionado con Maven. Como crítica constructiva, si hay algo que “desmerece” estos artículos son las faltas de ortografía como leísmos:
“….al proyecto para no tenerLE vacío.”—> tenerLO
O algunas más graves como:
“Todo a compilado…. “—-> HA compilado.
De nuevo, artículos didácticos y buenos.
Lo apunto , a ver si mejoro 🙂
buen día, creo que podrías mejorar el articulo, en la mayoría de los casos es mas útil tener un solo archivo properties (el mismo nombre para los dos perfiles, ejemplo: configuracionDB.properties), lo que realmente da valor es que los valores se ajusten en tiempo de compilacion y generen el empaquetado con los valores correctos para cada entorno, esto se puede lograr colocando las propiedades en el pom.xml en cada perfil y activando el componente filter de maven para que el recursos tome estas propiedades al momente de empaquetar. saludos
gracias por el aporte 🙂
Hola
Como se puede hacer para que los properties esten afuera del ear o war
gracias
saludos
Muy buena explicación, Aunque me surgió una duda, en un archivo xml defino el jdbc y este archivo debo modificarlo cada vez que paso a producción, ¿es posible de acuerdo a los profiles pasarle los datos de conexion?.
saludos
si no tendrias problemas a traves de maven properties
Un artículo súper útil, como de costumbre!
¿Podrías poner un pequeño ejemplo de cómo conseguirlo? No entiendo muy bien cómo desde Maven se podría, utilizando una property definida en el POM, modificar una propiedad de un archivo properties que pertenezca al código del proyecto. Es interesante como propone Roberto para automatizar cambios en URLs para diferentes perfiles al igual que publicas en el artículo, desarrollo y producción.
Muchas gracias!
justamente lo he encontrado bien explicado, por si a alguien más le pudiese servir:
http://stackoverflow.com/a/3868556/3736964
gracias:)