2011-06-30 3 views
37

Estoy usando el filtrado de recursos para reemplazar algunos $ {valores} en un archivo de propiedades.¿Cómo puedo usar un valor predeterminado si una variable de entorno no está configurada para el filtrado de recursos en maven?

p. Ej. el archivo contiene PROPERTY = $ {VALUE}

Quiero que se reemplace $ {VALUE} con la variable de entorno $ VALUE que funciona bien si se establece $ VALUE cuando se ejecuta la compilación. Increíble.

Sin embargo, estos archivos solo se configuran en nuestro entorno de compilación oficial (por Jenkins) y no en compilaciones de desarrollador, por lo que los $ {valores} quedan en el archivo de propiedad después del filtrado, lo que puede romper cosas. Prefiero no requerir entornos en entornos de desarrollador, ya que eso siempre conduce a construcciones de desarrollo frágiles y desarrolladores quejumbrosos.

¿Cómo puedo usar el valor de la variable de entorno si está configurado y usar otro valor de propiedad predeterminado si la env var no está configurada?

De acuerdo con mis pruebas, funciona al revés de manera predeterminada, ya que las propiedades establecidas en el pom anularán las variables de entorno con el objetivo de filtrar los recursos.

Gracias

+0

Se puede ver mi respuesta aquí por una pregunta similar [Cómo identificar y establecer una propiedad de entorno que falta en Maven?] [1] [1]: http://stackoverflow.com/a/24456751/1877108 – Arnab

+0

Posible duplicado de [Configuración de valores predeterminados para las propiedades personalizadas de Maven 2] (http://stackoverflow.com/questions/899274/setting-default-values -for-custom-maven-2-properties) –

Respuesta

40

estoy usando el perfil para determinar como

<profiles> 
    <profile> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
     <property> 
     <name>!myproperty</name> 
     </property> 
    </activation> 
    ... 
    <properties> 
     <myproperty>some value</myproperty> 
    </properties> 
    </profile> 
    ... 
</profiles> 

Tenga en cuenta

  1. El activeByDefault se establece en true con el propósito de permitir que por defecto.
  2. El !myproperty significa que esta propiedad no existe o no existe.
  3. Si no existe el myproperty, simplemente utilice el myproperty definido en el properties.

Puede ver más información en http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Espero que esto puede ayudar a alcanzar sus necesidades.

Saludos,

Charlee Ch.

+7

Muchas gracias por su comentario. Eliminé el true para que se activara basado únicamente en el valor de la propiedad y lo cambié a ! Env.myproperty para que recoja la variable de entorno. Pero ahora funciona perfectamente. Muchas gracias por tu ayuda. –

+6

Desafortunadamente, este enfoque no funciona cuando tiene otros perfiles invocados explícitamente. En este caso, no se activan las invocaciones de perfil implícitas ... – Anton

+1

Es solo un valor predeterminado. ¿Por qué maven es tan complicado? –

5

Tienen el mismo problema en nuestro grupo de desarrollo al usar un valor de entorno para denotar una ruta del sistema de archivos, específicamente la diferencia entre Linux y Windows.

Sobre la base de la otra solución en la misma pregunta: ¿

<profile> 
    <id>MY_VAR default value</id> 
    <activation> 
     <property> 
      <name>!env.MY_VAR</name> 
     </property> 
    </activation> 
    <properties> 
     <env.MY_VAR>default value</env.MY_VAR> 
    </properties> 
</profile> 
+0

Usar un perfil tiene una desventaja poco: no se ejecutará cuando se ejecuta otro perfil, incluso cuando se establece como predeterminado. Necesita solicitar explícitamente este perfil cuando ejecuta otros perfiles. –

+1

Una mejor solución sería usar hormiga, ya que exporta la variable para que todos lo sepan. Vea aquí: http://stackoverflow.com/a/36770198/435605 –

Cuestiones relacionadas