2012-03-02 28 views
14

Tenemos una propiedad que contiene una serie de argumentos para pasar a la JVM en un script Ant.Ant, jvmarg, propiedades del sistema y comillas

Ejemplo (nótese las comillas en la segunda entrada):

-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password 

Si puedo imprimir el contenido de la variable con el objetivo echo consigo el resultado esperado

<echo message="${jvm.arguments}"/> 

produce

-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password 

Luego uso la variable como argumento para la JVM.

Ejemplo:

<junit fork="true" forkmode="once" showoutput="true" printsummary="on"> 
    <jvmarg 
     line="-XX:MaxPermSize=256m -Xms1024M ${jvm.arguments}" 

Las citas se retiran en silencio. La salida detallada de Ant me da

[junit] Executing '/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java' with arguments: 
[junit] '-XX:MaxPermSize=256m' 
[junit] '-Xms1024M' 
[junit] '-Dsql.driver=oracle.jdbc.driver.OracleDriver' 
[junit] '-Dapp.datasource-properties=URL=jdbc:oracle:thin:@//192.168.56.42:1521/xe:User=user=password' 

¿Cómo puedo pasar una propiedad del sistema a la JVM que contiene comillas? (simple o doble)?

Intenté escapar de ellos, utilizando comillas dobles sin efecto.

Respuesta

14

utilizo <jvmarg> con solo valor

<jvmarg value="-ea"/> 
<jvmarg value="-Dapp.URL=URL=${jvmargs}"/> 

Entonces este llamado con línea siguiente ...

ant tests -Djvmargs=\'jdbc:oracle:thin:@//192.168.56.42:1521/xe\':User=user:Password=password -debug 

La salida con -debug ha líneas esperado por ti.

[junit] '-ea' 
[junit] '-Dapp.URL=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password' 

El line está destinado a procesar argumentos separados por espacio. Podría estar haciendo un análisis y procesamiento adicional para manejar la entrada con espacios en blanco. No he revisado el código todavía.

Cuestiones relacionadas