如何为ant junit命令提供条件jvmarg?

时间:2016-02-14 15:35:49

标签: java jenkins ant junit

我们的商店在Java 6,7和8上设置了多个构建和测试环境(Jenkins,Ant 1.9.6)。仅在Java 7上,为了使我们的测试成功运行,我们需要添加JVM参数-XX:-UseSplitVerifier

我无法在condition内使用junit,因此我在init任务中设置了一个布尔属性:

<condition property="usesplitverifier">
    <equals arg1="${ant.java.version}" arg2="1.7" />
</condition>

在我的test任务中,只有当该属性为jvmarg时,我才需要将junit添加到true

<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添加到我们的构建/测试环境中。此外,我还想避免在构建脚本中添加更多目标(我试图简化构建过程)。还有其他方法可以在这里发挥作用吗?

1 个答案:

答案 0 :(得分:2)

在我撰写此问题时,我发现the solution中的another question因为过于模糊而被关闭。我决定发布这个问题,以提供一个特定的用例。

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}返回编译Ant的JVM版本。
相关问题