Diferencia entre revisiones de «Perfiles en Maven»

De Dos Ideas.
Saltar a: navegación, buscar
(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.

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>
 ...