是否有一个 ANT 任务只在给定文件存在时才执行一个块?我有一个问题,我有一个通用的蚂蚁脚本,应该做一些特殊的处理,但只有当一个特定的配置文件是存在的。
可用的 和 < 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
要测试的实际资源是 指定为嵌套元素。
举个例子:
<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"/>
从 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>标签还有其他可能的变化:
<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>