只在文件存在时运行 Ant 目标的 Ant 任务?

是否有一个 ANT 任务只在给定文件存在时才执行一个块?我有一个问题,我有一个通用的蚂蚁脚本,应该做一些特殊的处理,但只有当一个特定的配置文件是存在的。

181872 次浏览

可用的 和 < a href = “ http://ant.apache.org/Manual/Tasks/conttion.html”rel = “ noReferrer”> 条件

<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>


<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>

从编码的角度来看,这可能更有意义一些(可以从 ant-Contrib: http://ant-contrib.sourceforge.net/获得) :

<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>

自蚂蚁1.8.0以来,显然也存在资源

Http://ant.apache.org/manual/tasks/conditions.html

测试资源的存在性 Ant 1.8.0

要测试的实际资源是 指定为嵌套元素。

举个例子:

<resourceexists>
<file file="${file}"/>
</resourceexists>

我正在对上面这个问题的好答案的例子进行修改,然后我发现了这个

从 Ant 1.8.0开始,您可以使用 财产扩张; 真值 (或在或是)将启用该项目, 而假的(或关闭的或没有的)将 禁用它。其他值仍然是 假定是属性名等等 只有在名为 属性的定义。

与旧式相比,这个 给你额外的灵活性, 因为你可以重写条件 从命令行或父级 剧本:

<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的蚂蚁手册

希望这个例子对某些人有用。他们没有使用现有的资源,但假设你可以? ... ..。

我认为值得参考这个类似的答案: 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>

您可以通过下令使用名称等于所需名称的文件列表执行此操作。这比创建一个特殊目标要容易和直接得多。您不需要任何其他工具,只需要使用纯 Ant 即可。

<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>

见: FileSet 文件集

检查使用像 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>