2012-03-02 58 views
14

我們有一個屬性,它包含一系列要在Ant腳本中傳遞給JVM的參數。Ant,jvmarg,系統屬性和引號

例子(注意在第二個條目中的引號):

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

的引號靜默去除。螞蟻的詳細輸出給我

[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

我用<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是爲了處理以空格分隔的參數。它可以做額外的解析和處理來處理輸入與空白。我還沒有檢查代碼。