Муравей, jvmarg, системные свойства и цитаты - PullRequest
14 голосов
/ 02 марта 2012

У нас есть свойство, которое содержит серию аргументов, которые должны быть переданы JVM в скрипте Ant.

Пример (обратите внимание на кавычки во второй записи):

-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}"/>

1010 * производит *

-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 Ответ

15 голосов
/ 05 марта 2012

Я использую <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 содержит ожидаемые вами строки.1008 *

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

line предназначен для обработки аргументов, разделенных пробелом.Это может быть дополнительный анализ и обработка для обработки ввода с пробелами.Я еще не проверил код.

...