Diferencia entre revisiones de «Perfiles en Maven»
(Descripcion basica de los perfiles de MAven) |
(Configuracion de variables) |
||
| Línea 49: | Línea 49: | ||
<activeProfile>development</activeProfile> | <activeProfile>development</activeProfile> | ||
</activeProfiles> | </activeProfiles> | ||
| + | |||
| + | |||
| + | == Personalización de parámetros == | ||
| + | |||
| + | Para personalizar parámetros de configuración, son necesarios 2 pasos: | ||
| + | 1. Declarar los archivos de recursos como 'filtrables' con el proposito que Maven los parsee en búsqueda de variables. | ||
| + | 2. Definir dichas variables dentro del perfil, con los valores que van a tomar para el mismo. | ||
| + | |||
| + | Ej.: | ||
| + | |||
| + | Si se quiere configurar la base de datos para el ambiente de desarrollo y de producción, declaramos el archivo donde se encuentra configurado como filtrable y al resto de los recursos como no filtrables. De esta forma se copiaran todos los archivos | ||
| + | |||
| + | ''pom.xml'' | ||
| + | ... | ||
| + | <build> | ||
| + | <resources> | ||
| + | <resource> | ||
| + | <directory>src/main/resources</directory> | ||
| + | <includes> | ||
| + | <include>application-db.xml</include> | ||
| + | </includes> | ||
| + | <filtering>true</filtering> | ||
| + | </resource> | ||
| + | <resource> | ||
| + | <directory>src/main/resources</directory> | ||
| + | <excludes> | ||
| + | <exclude>application-db.xml</exclude> | ||
| + | </excludes> | ||
| + | <filtering>false</filtering> | ||
| + | </resource> | ||
| + | </resources> | ||
| + | </build> | ||
| + | ... | ||
| + | ''application-db.xml'' | ||
| + | <?xml version="1.0" encoding="UTF-8"?> | ||
| + | |||
| + | <beans xmlns="http://www.springframework.org/schema/beans" | ||
| + | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| + | xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> | ||
| + | |||
| + | <bean id="defaultDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> | ||
| + | <property name="driverClassName" value="${db.driverClassName}"/> | ||
| + | <property name="url" value="${db.url}"/> | ||
| + | <property name="databaseName" value="${db.databaseName}"/> | ||
| + | </bean> | ||
| + | |||
| + | <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> | ||
| + | <property name="sessionFactory" ref="defaultSessionFactory"/> | ||
| + | </bean> | ||
| + | </beans> | ||
| + | |||
| + | Luego en el archivo pom.xml, se configura las 3 variables para los 3 ambientes. | ||
| + | Además se pueden agregar dependencias extra, según el ambiente. En este caso agregaremos el driver de la base de datos. | ||
| + | ... | ||
| + | <profiles> | ||
| + | <profile> | ||
| + | <id>production</id> | ||
| + | <activation> | ||
| + | <property> | ||
| + | <name>env</name> | ||
| + | <value>production</value> | ||
| + | </property> | ||
| + | </activation> | ||
| + | <dependencies> | ||
| + | <dependency> | ||
| + | <groupId>mysql</groupId> | ||
| + | <artifactId>mysql-connector-java</artifactId> | ||
| + | <version>5.0.5</version> | ||
| + | </dependency> | ||
| + | </dependencies> | ||
| + | <properties> | ||
| + | <db.driverClassName>com.mysql.jdbc.Driver</db.driverClassName> | ||
| + | <db.url>jdbc:mysql://localhost:3306</db.url> | ||
| + | <db.databaseName>cliente</db.databaseName> | ||
| + | </properties> | ||
| + | </profile> | ||
| + | |||
| + | <profile> | ||
| + | <id>development</id> | ||
| + | <activation> | ||
| + | <property> | ||
| + | <name>env</name> | ||
| + | <value>development</value> | ||
| + | </property> | ||
| + | </activation> | ||
| + | <dependencies> | ||
| + | <dependency> | ||
| + | <groupId>org.apache.derby</groupId> | ||
| + | <artifactId>derby</artifactId> | ||
| + | <version>10.5.3.0_1</version> | ||
| + | <type>jar</type> | ||
| + | <scope>compile</scope> | ||
| + | </dependency> | ||
| + | </dependencies> | ||
| + | <properties> | ||
| + | <db.driverClassName>org.apache.derby.jdbc.EmbeddedDriver</db.driverClassName> | ||
| + | <db.url>jdbc:derby:memory:cliente;create=true</db.url> | ||
| + | <db.databaseName>cliente</db.databaseName> | ||
| + | </properties> | ||
| + | </profile> | ||
| + | </profiles> | ||
| + | ... | ||
Revisión actual del 18:40 26 abr 2010
Los perfiles permiten personalizar el compilado de un artefacto para un ambiente particular; permiten la portabilidad entre diferentes ambientes.
Los perfiles permiten configurar variables específicas para el ambiente donde se vaya a correr la aplicación. También se pueden agregar dependencias y condicionar la ejecución de etapas.
Otro beneficio es que ya se encuentra identificado y separado cuales son los valores que varían entre un ambiente y otro.
Ej.: Si el proceso de desarrollo tiene 3 estadios (desarrollo, testing y producción), se pueden definir 3 perfiles, acordes a dichos ambiente. El responsable de cada ambiente debería encargarse de modificar exclusivamente los valores para su ambiente.
Contenido
Configuración de perfiles
Un perfil se puede configurar en 4 lugares distintos:
- Por proyecto (dentro del archivo pom.xml)
- Por usuario (%USER_HOME%/.m2/settings.xml)
- Global a todos los usuarios de la computadora (%M2_HOME%/conf/settings.xml).
- Archivo de perfil (profiles.xml en el mismo directorio que el archivo pom.xml)
Activación de perfiles
Un perfil se puede activar de varias formas:
- Por linea de comando(utilizando el parámetro -P <nombre-de-perfil>
- A través de la configuración de Maven
- A través de las variables de entorno
- Por parámetros en el sistema operativo.
- Por presencia o ausencia de determinados archivos.
Explicitamente
Se puede activar un perfil de forma explicita a partir de la linea de comando, utilizando el parámetro -P
Ej: compila y empaqueta para el ambiente de producción
mvn clean package -P production
Así como se puede activar un perfil, también se puede desactivar. Para ello se utiliza el operador !. Además se pueden activar/desactivar varios en simultáneo, separandolos con com
Ej: compila y empaqueta para el ambiente de testing, desactivando el ambiente de desarrollo
mvn clean package -P !development,testing
A través de la configuración de Maven
Se puede activar un perfil utilizando el tag "activeProfiles". Ej.: para activar explictamente un perfil de desarrollo para todos los usuarios, agregar al archivo %M2_HOME%/conf/settings.xml
<activeProfiles> <activeProfile>development</activeProfile> </activeProfiles>
Personalización de parámetros
Para personalizar parámetros de configuración, son necesarios 2 pasos: 1. Declarar los archivos de recursos como 'filtrables' con el proposito que Maven los parsee en búsqueda de variables. 2. Definir dichas variables dentro del perfil, con los valores que van a tomar para el mismo.
Ej.:
Si se quiere configurar la base de datos para el ambiente de desarrollo y de producción, declaramos el archivo donde se encuentra configurado como filtrable y al resto de los recursos como no filtrables. De esta forma se copiaran todos los archivos
pom.xml
...
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application-db.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application-db.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
</build>
...
application-db.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="defaultDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driverClassName}"/> <property name="url" value="${db.url}"/> <property name="databaseName" value="${db.databaseName}"/> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="defaultSessionFactory"/> </bean> </beans>
Luego en el archivo pom.xml, se configura las 3 variables para los 3 ambientes. Además se pueden agregar dependencias extra, según el ambiente. En este caso agregaremos el driver de la base de datos.
...
<profiles>
<profile>
<id>production</id>
<activation>
<property>
<name>env</name>
<value>production</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.5</version>
</dependency>
</dependencies>
<properties>
<db.driverClassName>com.mysql.jdbc.Driver</db.driverClassName>
<db.url>jdbc:mysql://localhost:3306</db.url>
<db.databaseName>cliente</db.databaseName>
</properties>
</profile>
<profile>
<id>development</id>
<activation>
<property>
<name>env</name>
<value>development</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.5.3.0_1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<db.driverClassName>org.apache.derby.jdbc.EmbeddedDriver</db.driverClassName>
<db.url>jdbc:derby:memory:cliente;create=true</db.url>
<db.databaseName>cliente</db.databaseName>
</properties>
</profile>
</profiles>
...