2012-03-02 44 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是为了处理以空格分隔的参数。它可以做额外的解析和处理来处理输入与空白。我还没有检查代码。