即使给定路径上的文件不存在,此代码也始终返回真值
<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>
输出总是: - * 架构文件为真 ***
即使文件在该路径上不可用。 请帮我找错。
答案 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>
注意:
以下替代变体适用于旧版本的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"/>