We have a property which contains a series of arguments to be passed to the JVM in an Ant script.
Example (note the quotes in the second entry):
-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password
If I print the content of the variable with the echo
target I get the expected result
<echo message="${jvm.arguments}"/>
produces
-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password
I then use the variable as an argument to the JVM.
Example:
<junit fork="true" forkmode="once" showoutput="true" printsummary="on">
<jvmarg
line="-XX:MaxPermSize=256m -Xms1024M ${jvm.arguments}"
The quotes are silently removed. The verbose output of Ant gives me
[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'
How can I pass a system property to the JVM containing quotes? (single or double)?
I tried escaping them, using double quotes with no effect.
I use <jvmarg>
with single value
<jvmarg value="-ea"/>
<jvmarg value="-Dapp.URL=URL=${jvmargs}"/>
Then this called with following line...
ant tests -Djvmargs=\'jdbc:oracle:thin:@//192.168.56.42:1521/xe\':User=user:Password=password -debug
The output with -debug has lines expected by you.
[junit] '-ea'
[junit] '-Dapp.URL=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password'
The line
is meant to process arguments separated with space. It could be doing additional parsing and processing to handle input with whitespace. I have not checked the code yet.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With