我们在Ant构建中有一个文件集,看起来像这样:
<fileset dir="somewhere/lib" includesfile="third-party-jars.txt"/>
然后,每个jar都会在文本文件中完整地拼写出来。(我们把它放在一个单独的文本文件中的原因实际上与构建文件的简洁无关,而是为了更容易从我们的集成测试中检查列表,该测试检查所有第三方jar文件许可证是否都有文档记录。)
有人提交了一个阻止文件进入生成的文件。Ant根本没有找到丢失的文件——构建继续进行。尽管文件名拼写完整,但没有检测到丢失的文件,这似乎很糟糕。。。所以我现在正试图解决这个问题。
erroronmissingdir
有一个属性,但添加它没有帮助(dir
没有丢失。)有没有办法在文件集中丢失文件时出错?理想的紧凑方式。。。因为我们有不止一个这样的文件集,复制代码听起来并不吸引人。
其他人询问了更简单的变体,他们想在哪里检查一个文件。要检查单个文件,请使用available
任务。available
似乎只支持一个资源。
我尝试限制资源收集,试图找到可用资源和不可用资源。
<restrict id="temp.available"><resources refid="@{ref-name}"/></restrict>
<difference id="temp.unavailable">
<resources refid="@{ref-name}"/>
<resources refid="temp.available"/>
</difference>
<fail message="Missing stuff">
<condition>
<resourcecount refid="temp.unavailable" when="greater" count="0"/>
</condition>
</fail>
这不起作用,似乎是因为资源集合已经丢失了不存在的项。
使用本机fileset
支持是无法实现您所要求的。fileset
的作用就像一个扫描仪:它基于一个特定的目录,并根据您提供的包含/排除模式包含所有文件。甚至erroronmissingdir
直到蚂蚁1.7左右才成为fileset
的一部分
最好是围绕available
任务编写一个宏,将资源集合传递给宏,并使用for
循环(来自Ant-Contrib)来测试每个文件的可用性。