AntスクリプトでJVMに渡される一連の引数を含むプロパティがあります。
例(2番目のエントリの引用符に注意してください):
-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に渡すにはどうすればよいですか? (シングルかダブルか)?
二重引用符を使用して、効果なしでそれらをエスケープしてみました。
私が使う <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
は、スペースで区切られた引数を処理するためのものです。空白を含む入力を処理するために、追加の解析と処理を実行している可能性があります。私はまだコードをチェックしていません。