web-dev-qa-db-ja.com

Ant、jvmarg、システムプロパティおよび引用符

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に渡すにはどうすればよいですか? (シングルかダブルか)?

二重引用符を使用して、効果なしでそれらをエスケープしてみました。

14
Matteo

私が使う <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は、スペースで区切られた引数を処理するためのものです。空白を含む入力を処理するために、追加の解析と処理を実行している可能性があります。私はまだコードをチェックしていません。

15
Jayan