0

我有一个 ant 任务,它从 myproject.properties. 环境属性值设置为 prod并显示“Prod 条件为真”。我看到该 ${environment}变量设置为 prod,但如果条件永远不会为真。有人可以解释为什么吗?

myproject.properties:

environment=prod

构建.xml:

<project name="my-project" default="run" basedir=".">
  <property file="myproject.properties" />
  <target name="run">
  <echo message="running target run ${environment}"/>
    <if>
      <equals arg1="${environment}" arg2="prod">
        <then>
          <echo message="Prod condition is true"/>
           <!--do prod environment specific task-->
       </then> 
    </if>    
  </target>
</project>
4

3 回答 3

2

除了您的equals任务缺少结束标签(实际上它应该是一个自闭合标签)这一事实之外,我敢打赌您在某处隐藏了一个空格。在你的echo,用撇号或其他东西包围属性的打印输出:

<echo message="running target run '${environment}'"/>

您可能会在值的末尾看到一个空格。这是我能想到的唯一合理的解释。或者,尝试运行,-Denvironment=prod看看会发生什么。

于 2012-10-02T22:59:52.100 回答
1

以下解决方案使用核心 ANT。它避免使用ant-contrib扩展提供的“if”任务。

<project name="my-project" default="run" basedir=".">
    <property file="myproject.properties" />

    <condition property="prod.set">
        <equals arg1="${environment}" arg2="prod"/>
    </condition>

    <target name="run" if="prod.set">
        <echo message="Prod condition is true"/>
    </target>
</project>
于 2012-10-05T18:05:02.427 回答
0

希望您会这样做,但只是提醒一下,您是否在 project.xml 中包含了 antcontrib jar 并放置了相关的 taskdef?如果不是,请更正构建文件,并将 ant contrib jar 复制到类路径中

<project name="SampleWS" default="run" basedir=".">
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="lib/ant-contrib-0.6.jar" onerror="ignore"/>
 <property file="myproject.properties" />
 <target name="run">
 <echo message="running target run ${environment}"/>
    <if>
      <equals arg1="${environment}" arg2="prod"/>
        <then>
          <echo message="Prod condition is true"/>
           <!--do prod environment specific task-->
       </then> 
   </if>    
</target>
</project>
于 2012-10-04T04:51:09.483 回答