是否有一个仅在给定文件存在时才执行块的ANT Task?我有一个问题,我有一个通用的ant脚本,该脚本应该进行一些特殊处理,但前提是存在特定的配置文件。
是否有一个仅在给定文件存在时才执行块的ANT Task?我有一个问题,我有一个通用的ant脚本,该脚本应该进行一些特殊处理,但前提是存在特定的配置文件。
Answers:
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
if
和unless
属性仅启用或禁用它们所连接的目标,即总是执行目标的依赖关系。否则,依靠目标来设置要检查的属性将不起作用。
<Available>
已弃用。我用这个: <target name="do-if-abc" if="${file::exists('abc.txt')}"> ... </target>
:检查nant.sourceforge.net/release/0.85/help/functions/...
<available>
已弃用?2: ${file::existst...}
似乎无法与Ant(Apache ANT 1.9.7)一起使用
从编码角度看(从ant-contrib提供:http : //ant-contrib.sourceforge.net/),这可能更有意义:
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
从Ant 1.8.0开始,显然还存在资源
来自 http://ant.apache.org/manual/Tasks/conditions.html
测试资源是否存在。从Ant 1.8.0开始
要测试的实际资源被指定为嵌套元素。
一个例子:
<resourceexists> <file file="${file}"/> </resourceexists>
我打算从上面对这个问题的正确答案中重新整理示例,然后发现
从Ant 1.8.0开始,您可以改为使用属性扩展。值为true(或启用或是)将启用该项目,而值为false(或禁用或否)将禁用该项目。其他值仍假定为属性名称,因此仅在定义了命名属性的情况下才启用该项目。
与较早的样式相比,这可以为您提供更多的灵活性,因为您可以从命令行或父脚本覆盖条件:
<target name="-check-use-file" unless="file.exists"> <available property="file.exists" file="some-file"/> </target> <target name="use-file" depends="-check-use-file" if="${file.exists}"> <!-- do something requiring that file... --> </target> <target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>
来自http://ant.apache.org/manual/properties.html#if+unless上的ant手册
希望这个例子对某些人有用。他们没有使用resourceexists,但是大概可以吗?
if="${file.exists}"
应将其替换为if="file.exists"
as,if
并unless
仅按名称检查属性的存在,而不是其值。
我认为值得参考类似的答案:https : //stackoverflow.com/a/5288804/64313
这是另一个快速解决方案。使用<available>
标记可以对此进行其他更改:
# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
<condition><not>
<available file="${file}" />
</not></condition>
</fail>
DB_*/**/*.sql
如果存在与通配符过滤器相对应的一个或多个文件,则可以执行以下操作。也就是说,您不知道文件的确切名称。
在这里,我们在任何称为“ DB_ * ”的子目录中递归查找“ * .sql ”文件。您可以根据需要调整过滤器。
注意:Apache Ant 1.7及更高版本!
如果存在匹配文件,这是设置属性的目标:
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
这是一个“条件”目标,仅在文件存在时运行:
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>