Ant, jvmarg, свойства системы и кавычки
У нас есть свойство, которое содержит ряд аргументов, которые должны быть переданы JVM в Ant script.
Пример (обратите внимание на цитаты во второй записи):
-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password
Если я распечатаю содержимое переменной с целью echo
, я получаю ожидаемый результат
<echo message="${jvm.arguments}"/>
производит
-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password
Затем я использую переменную в качестве аргумента для JVM.
Пример:
<junit fork="true" forkmode="once" showoutput="true" printsummary="on">
<jvmarg
line="-XX:MaxPermSize=256m -Xms1024M ${jvm.arguments}"
Котировки молча удаляются. Подробный вывод Ant дает мне
[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'
Как передать системное свойство JVM, содержащему кавычки? (одиночный или двойной)?
Я попытался ускользнуть от них, используя двойные кавычки без эффекта.
Ответы
Ответ 1
Я использую <jvmarg>
с единственным значением
<jvmarg value="-ea"/>
<jvmarg value="-Dapp.URL=URL=${jvmargs}"/>
Затем это называется следующей строкой...
ant tests -Djvmargs=\'jdbc:oracle:thin:@//192.168.56.42:1521/xe\':User=user:Password=password -debug
Выход с -debug имеет ожидаемые вами строки.
[junit] '-ea'
[junit] '-Dapp.URL=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password'
line
предназначен для обработки аргументов, разделенных пробелом. Он может выполнять дополнительный синтаксический анализ и обработку для обработки ввода с помощью пробелов. Я еще не проверял код.