【发布时间】:2013-11-21 15:46:36
【问题描述】:
我有一个带有分号分隔的罐子列表的属性。该属性的内容是从文件中读取的,而不是构建文件的一部分,但它看起来像这样:
<property name="jars" value="a.jar;b.jar;c.jar"/>
我想检查所有文件是否可用。我知道如何手动使用:
<target name="opt">
<echo message="jars: ${jars}"/>
<condition property="found">
<and>
<available file="a.jar"/>
<available file="b.jar"/>
<available file="c.jar"/>
</and>
</condition>
<echo message="found: ${found}"/>
</target>
但是如果文件列表在一个属性中并且不能写入构建文件中怎么办呢?
我需要“应用和映射可用文件”之类的东西。如何做到这一点?
【问题讨论】:
-
见Ant check existence for a set of files 的例子。如果
jars是逗号分隔的列表,那么在该问题中应用答案会更容易。否则,您可以使用<replacestring>从分号分隔的列表中转换jars,如Replacing characters in Ant property中所示 -
@ChadNouis 看起来很有希望,但当我尝试时,我的 Ant 1.7.1 显示:
restrict doesn't support the nested "not" element。 -
我能够复制您在 Ant 1.7.1 中看到的错误消息。 Ant 1.8.2 不再出现此错误。如果您坚持使用 Ant 1.7.1,请将
xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors"添加到<project>元素。然后将<not>更改为<rsel:not>并将<exists>更改为<rsel:exists>。 -
谢谢,但我只是通过使用资源的集合操作得到它。所需文件之间的差异以及所需文件与现有文件的交集必须为零。这适用于 1.7.1,并且不需要额外的名称空间。您对资源集合的提示非常有用!谢谢!
标签: ant