2012-01-09 47 views
8

Necesito ejecutar desde Gradle un script Ant que se basa en variables de entorno. Ant utiliza <property environment="env"/> para ello.Configuración de variables de entorno de Gradle

Intenté hacer env.foo="bar" en Gradle, pero arroja una excepción de Groovy.

¿Cuál es la forma correcta de pasar variables de entorno de Gradle a Ant?

+0

¿trató de utilizar el script de construcción Ant través 'ant.importBuild 'build.xml''? –

+0

@Benjamin Eso es lo que estoy tratando de lograr. Lamentablemente, el script heredado de Ant se basa en varias variables de entorno. – Sergey

Respuesta

4

Es imposible establecer variables de entorno de Gradle o JVM en general, pero es posible engañar a la hormiga como esto:

ant.project.properties['env.foo'] = 'bar' 
+0

Aparece un error: 'No se pudo encontrar la propiedad '' en la tarea '' –

9

Desde el gradle 2.0 docs, veo algo como esto es posible

test { 
    environment "LD_LIBRARY_PATH", "lib" 
} 

O en este caso podría utilizar este

systemProperty "java.library.path", "lib" 
+3

Ojalá tuviera Gradle 2.0 hace dos años :) – Sergey

+1

Intenté esto en mi archivo build.gradle (con otro nombre de variable). Luego verifico la variable del sistema en mi prueba de esta manera: 'assertTrue (System.getenv(). ContainsKey (" SOME_TEST_VAR "));' Esto da un error de aserción. Entonces, parece que la variable de entorno no está configurada. – user3791111

+0

Aparece un error 'No se pudo encontrar el método systemProperty() para los argumentos' –

1

Accep ciado de solución @Sergey:

ant.project.properties['env.foo'] = 'bar' 

No funciona para mí engradle 2,9 y ant 1.9.7. Eso no arrojó ningún error, pero no hacer nada. De hecho, si usted está vistazo a código que implemented as:

public Hashtable<String, Object> getProperties() { 
    return PropertyHelper.getPropertyHelper(this).getProperties(); 
} 

donde org.apache.tools.ant.PropertyHelper#getProperties is:

public Hashtable<String, Object> getProperties() { 
    //avoid concurrent modification: 
    synchronized (properties) { 
     return new Hashtable<String, Object>(properties); 
    } 
} 

Por lo tanto, hacer copia explícita y no puede trabajar.

La forma de hacerlo correctamente en gradle archivo:

ant.project.setProperty('env.foo', 'bar') 

Documentation mencionar algunas otras maneras (nota, sin proyecto):

ant.buildDir = buildDir 
ant.properties.buildDir = buildDir 
ant.properties['buildDir'] = buildDir 
ant.property(name: 'buildDir', location: buildDir) 
Cuestiones relacionadas