2012-03-02 8 views
14

AntスクリプトのJVMに渡される一連の引数を含むプロパティがあります。Ant、jvmarg、システムプロパティと引用符

例(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

は私が-debugで

ant tests -Djvmargs=\'jdbc:oracle:thin:@//192.168.56.42:1521/xe\':User=user:Password=password -debug 

出力はラインは、あなたが期待している...単一の値、これは次の行で呼び出さ

<jvmarg value="-ea"/> 
<jvmarg value="-Dapp.URL=URL=${jvmargs}"/> 

<jvmarg>を使用しています。

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

lineは、引数をスペースで区切って処理するためのものです。空白を含む入力を処理するために、追加の解析と処理を行うことができます。私はまだコードをチェックしていない。