Ant属性覆盖

时间:2014-03-24 16:24:38

标签: java ant jenkins

我有一个问题,我有一个build.properties,我有一个属性test = true; 只有在测试成立的情况下才应调用ant目标。我希望将该值作为默认值。有可能以某种方式改变詹金斯的价值吗?我试着设置test = false,但似乎没有效果。一些建议?

3 个答案:

答案 0 :(得分:1)

在这种情况下,您必须像下面一样修改Ant脚本,然后它将按预期工作。 如果没有尝试类似的逻辑来设置ant的默认值和动态值。然后,如果从Jenkins传递值,如果它是-Dtest = true,否则默认情况下会将值赋值为false

<condition property="test" value="${test}" else="false">
    <isset property="${test}" />
</condition>

答案 1 :(得分:1)

让Ant目标仅在特定条件下执行

在Ant构建脚本中,您需要一个仅在满足特定条件时才执行的目标。使用if="property"标记的<target>属性很容易,但是检查属性是 set ,而不是它的值。您已将该属性设置为默认test=true。因此,对于您的情况,可以使用一种不同的方法。

<condition property="test.execute" value="${test}">
    <matches pattern="true" string="${test}"/>
</condition>

<target name="runtest" if="test.execute">
    <echo message="running tests"/>
</target>

此脚本会检查${test}的值,如果该值与 text "true"匹配,则会将${test.execute}的值设置为{{1}的值1}}。如果不是(即&#34; true&#34;以外的任何内容),则属性${test}仍然未设置

最后,只有在设置了属性${test.execute}时才会执行目标runtest

注意:这仅在该属性未设置时才有效。即使构建文件或属性中包含${test.execute}也会破坏这一点。

将变量通过Jenkins传递给Ant:

  • 选择调用Ant 构建步骤
  • 点击高级...
  • 目标下,输入您常用的目标(或默认为空)
  • 构建文件下,指定构建文件(或在<property name="test.execute" value=""/>的根目录中为默认build.xml留空)
  • 属性下,以$WORKSPACE格式输入参数。这与在命令行上使用param=value相同。请注意,在Jenkins中指定此字段中的属性时,您需要需要-Dparam=value
  • 因此,请输入-D

答案 2 :(得分:1)

使用Ant 1.9.2及更高版本(它假设使用Ant 1.9.1,但我遇到了问题),您现在可以在大多数任务中使用if:true参数:

<project default="test" xmlns:if="ant:if"> <!-- Note xmlns in the entity "project" -->
    <property name="run.this" value="true"/>
    <target name="test">
        <echo if:true="${run.this}">Run test target</echo>
    </target>
</project>

如果我跑:

$ ant
Buildfile: /Users/david/build.xml

test:
      [echo] Run test target

BUILD SUCCESSFUL
Total time: 0 seconds

如果我跑:

ant -Drun.this=false  # Sets property run.this to "false"
test:

BUILD SUCCESSFUL
Total time: 0 seconds

请注意,当if:true="${run.this}为false时,run.this会阻止回显执行。