martes, 28 de julio de 2015

Maven, los perfiles y los ficheros de propiedades

Hola buenas, en este post vamos a hablar un poco sobre como funciona Maven y los perfiles, principalmente enfocado a los ficheros de propiedades y la activación por defecto. Se suele dar en ciertos proyectos en los cuales hay diferentes ficheros de propiedades según el entorno donde se necesite desplegar la aplicación. Para evitar esto, que no deja de ser una fuente de errores, estan los perfiles. En maven podemos crear diferentes perfiles que nos permitan indicar determinadas propiedades en función del entorno donde se vaya a desplegar. De la siguiente forma:
       
  global
  defaultValue
 

 
  
   local
   
    true
   
   
    true
    localProfile
   
  
  
   pro
   
    false
    proProfile
   
  
 
Como podéis ver, hemos indicado que un perfil (en este caso el local) sea activado siempre por defecto. Esto quiere decir que si no indicamos ningún valor concreto, los ficheros de propiedades tendrán el valor de las propiedades de ese perfil. También podéis ver como hay dos tipos de propiedades. Las que estan definidas de forma global (como puede ser 'property.global') y las que estan definidas para cada perfile (como 'mvn.app.debug.mode'). Hay que tener en cuenta, que si en un determinado perfil, indicamos el valor de una propiedad global, sobreescribiremos este mismo. Ahora tenemos el siguiente código de prueba:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "file:src/test/resources/conf/mvc-dispatcher-servlet-test.xml")
public class ConstantsUtilTest {
 private final Logger LOGGER = Logger.getLogger(ConstantsUtilTest.class);
 @Autowired
 private ConstansUtil utility;
 @Test
 public void getProperties() {
  try {
   String propertyGlobal = utility.getPropertyGlobal();
   String propertyProfile = utility.getPropertyProfile();
   if(propertyGlobal == null){
    Assert.fail();
   }else{
    LOGGER.info("propertyGlobal: "+propertyGlobal);
    LOGGER.info("propertyProfile: "+propertyProfile);
    Assert.assertTrue(true);
   }
  } catch (final Exception except) {
   LOGGER.error("Error: ", except);
   Assert.assertTrue(false);
  }
 }
Si no indicamos ningún perfil y ejecutamos el código, nos devolverá el siguiente valor.
25 jul 2015 00:00:00,000  INFO [es.home.test.properties.ConstantsUtilTest:  30] propertyGlobal: global
25 jul 2015 00:00:00,000  INFO [es.home.test.properties.ConstantsUtilTest:  31] propertyProfile: localProfile
Si por lo contrarío lo compilamos y ejecutamos con un perfil concreto, nos indicará la siguiente salida. (Para este caso concreto hemos utilizado el comando: mvn test -P pro).
25 jul 2015 00:00:00,000  INFO [es.discoteca.test.properties.ConstantsUtilTest:  30] propertyGlobal: global
25 jul 2015 00:00:00,000  INFO [es.discoteca.test.properties.ConstantsUtilTest:  31] propertyProfile: proProfile

No hay comentarios:

Publicar un comentario