Ant、jvmarg、系统属性和引号

Posted

技术标签:

【中文标题】Ant、jvmarg、系统属性和引号【英文标题】:Ant, jvmarg, system properties and quotes 【发布时间】:2012-03-20 21:32:48 【问题描述】:

我们有一个属性,它包含一系列要在 Ant 脚本中传递给 JVM 的参数。

示例(注意第二个条目中的引号):

-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? (单人还是双人)?

我尝试转义它们,使用双引号没有效果。

【问题讨论】:

【参考方案1】:

我使用&lt;jvmarg&gt; 单值

 <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 用于处理以空格分隔的参数。它可能会进行额外的解析和处理以处理带有空格的输入。我还没有检查代码。

【讨论】:

以上是关于Ant、jvmarg、系统属性和引号的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter+Ant+Jenkins 自动化测试平台搭建

Ant+JMeter集成

Jmeter+jenkins+ant自动化测试环境搭建

ANT 从属性文件中读取属性,使用 ANT 属性

Ant属性文件

创建一个 ANT 宏来组合两个属性文件