繁体   English   中英

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

[英]Available tag in ant is always true if a file is unavailable also

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

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

输出始终为:- * schemafile为true ***

即使在该路径下文件不可用。 请帮助我找到错误。

为了使用标准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>

笔记:

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

以下替代变体将与较旧版本的ANT一起使用。 它使用“ if” 目标属性执行条件执行:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM