如果文件也不可用,则ant中的可用标记始终为true

时间:2014-01-10 12:24:11

标签: ant ant-contrib

即使给定路径上的文件不存在,此代码也始终返回真值

   <available file="${x}/schema/@{componentname}-schema.sql" type="file"      property="schema.file" />
      <if>
          <equals arg1="true" arg2="${schema.file}" />
            <then>
        <debug message="****schemafile is  ${schema.file} ******" />
            </then>
</if>

输出总是: - * 架构文件为真 ***

即使文件在该路径上不可用。 请帮我找错。

2 个答案:

答案 0 :(得分:1)

我重构了你的例子,以便使用标准的ANT任务:

<project name="demo" default="run" xmlns:if="ant:if">

  <property name="src.dir" location="src"/>

  <target name="run">
    <available file="${src.dir}/schema/schema.sql" type="file" property="schema.file" />
    <echo message="****schemafile is  ${schema.file} ******" if:set="schema.file"/>
  </target>

</project>

注意:

  • 我无法识别“调试”任务,因此请使用标准的“echo”任务
  • 我建议不要使用ant-contrib“if”任务。 ANT 1.9.1引入了if attribute,可以替代使用。

以下替代变体适用于旧版本的ANT。它使用“if”target attribute来执行条件执行:

<project name="demo" default="run">

  <property name="src.dir" location="src"/>
  <available file="${src.dir}/schema/schema.sql" type="file" property="schema.file" />

  <target name="run" if="schema.file">
    <echo message="****schemafile is  ${schema.file} ******"/>
  </target>

</project>

答案 1 :(得分:0)

问题是我在for循环中迭代上面的代码,并且由于属性是不可变的,如果设置为至少一次,它总是设置为true。这就是为什么在1次迭代之后,即使找不到文件,它也会回显 schemafile为真 **。

我添加了以下代码,在该代码之后将属性设置为false

<var name="schema.file" unset="true"/>
<property name="schema.file" value="false"/>