如何为 ant junit 命令提供条件 jvmarg?
How can I provide a conditional jvmarg for the ant junit command?
我们的商店在 Java 6、7 和 8 上设置了多个构建和测试环境(Jenkins、Ant 1.9.6)。仅在 Java 7 上,以便我们的测试运行 成功,我们需要添加 JVM 参数 -XX:-UseSplitVerifier
.
我无法在 junit
中使用 condition
,所以我在 init
任务中设置了一个布尔值 属性:
<condition property="usesplitverifier">
<equals arg1="${ant.java.version}" arg2="1.7" />
</condition>
在我的 test
任务中,只有当 属性 是 true
:
时,我才需要将 jvmarg
添加到 junit
<echo message="usesplitverifier: ${usesplitverifier}" />
<junit printsummary="yes" haltonfailure="no" fork="yes" forkmode="once" tempdir="${build.dir}">
<jvmarg if="usesplitverifier" value="-XX:-UseSplitVerifier" />
...
</junit>
输出为:
[echo] usesplitverifier: true
BUILD FAILED
C:\workspace\util\build.xml:141: jvmarg doesn't support the "if" attribute
我试图避免将 ant-contrib 添加到我们的 build/test 环境中。另外,我想避免向构建脚本添加更多目标(我试图简化构建过程)。是否有其他方法可能适用于此?
在我写这个问题的时候,我发现 the solution in another question 因为太模糊而被关闭了。我决定 post 这个问题是为了提供一个具体的用例。
if/unless namespaces 可以在任何 Ant 命令中使用。就我而言,我需要将 if
命名空间添加到项目中:
<project name="my-project" xmlns:if="ant:if" ...>
然后将条件放在jvmarg
上,如下所示:
<junit printsummary="yes" haltonfailure="no" fork="yes" forkmode="once" tempdir="${build.dir}">
<jvmarg if:set="usesplitverifier" value="-XX:-UseSplitVerifier" />
...
</junit>
if:set
在这种情况下起作用的原因是如果 ${ant.java.version}
不是 1.7
,则 属性 保持未设置。
注意事项(在我的情况下可以接受):
if/unless
命名空间仅在 Ant 1.9.1 之后可用。
- 在 Ant 1.6 之前,
${ant.java.version}
returns Ant 编译时使用的 JVM 版本。
我们的商店在 Java 6、7 和 8 上设置了多个构建和测试环境(Jenkins、Ant 1.9.6)。仅在 Java 7 上,以便我们的测试运行 成功,我们需要添加 JVM 参数 -XX:-UseSplitVerifier
.
我无法在 junit
中使用 condition
,所以我在 init
任务中设置了一个布尔值 属性:
<condition property="usesplitverifier">
<equals arg1="${ant.java.version}" arg2="1.7" />
</condition>
在我的 test
任务中,只有当 属性 是 true
:
jvmarg
添加到 junit
<echo message="usesplitverifier: ${usesplitverifier}" />
<junit printsummary="yes" haltonfailure="no" fork="yes" forkmode="once" tempdir="${build.dir}">
<jvmarg if="usesplitverifier" value="-XX:-UseSplitVerifier" />
...
</junit>
输出为:
[echo] usesplitverifier: true
BUILD FAILED
C:\workspace\util\build.xml:141: jvmarg doesn't support the "if" attribute
我试图避免将 ant-contrib 添加到我们的 build/test 环境中。另外,我想避免向构建脚本添加更多目标(我试图简化构建过程)。是否有其他方法可能适用于此?
在我写这个问题的时候,我发现 the solution in another question 因为太模糊而被关闭了。我决定 post 这个问题是为了提供一个具体的用例。
if/unless namespaces 可以在任何 Ant 命令中使用。就我而言,我需要将 if
命名空间添加到项目中:
<project name="my-project" xmlns:if="ant:if" ...>
然后将条件放在jvmarg
上,如下所示:
<junit printsummary="yes" haltonfailure="no" fork="yes" forkmode="once" tempdir="${build.dir}">
<jvmarg if:set="usesplitverifier" value="-XX:-UseSplitVerifier" />
...
</junit>
if:set
在这种情况下起作用的原因是如果 ${ant.java.version}
不是 1.7
,则 属性 保持未设置。
注意事项(在我的情况下可以接受):
if/unless
命名空间仅在 Ant 1.9.1 之后可用。- 在 Ant 1.6 之前,
${ant.java.version}
returns Ant 编译时使用的 JVM 版本。