【问题标题】:ant if target failing蚂蚁如果目标失败
【发布时间】:2012-10-02 22:05:30
【问题描述】:

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

myproject.properties:

environment=prod

build.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>

【问题讨论】:

  • 请按照 Isaac 的建议更正此构建脚本。尝试运行您发布的确切脚本,以避免混淆和复制问题。

标签: java ant ant-contrib


【解决方案1】:

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

&lt;echo message="running target run '${environment}'"/&gt;

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

【讨论】:

    【解决方案2】:

    以下解决方案使用核心 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>
    

    【讨论】:

      【解决方案3】:

      希望你会这样做,但只是提醒一下,你是否在 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多