【问题标题】:How to create a list of available files from a list of file names in a property in Ant?如何从 Ant 属性中的文件名列表中创建可用文件列表?
【发布时间】: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 是逗号分隔的列表,那么在该问题中应用答案会更容易。否则,您可以使用&lt;replacestring&gt; 从分号分隔的列表中转换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" 添加到 &lt;project&gt; 元素。然后将&lt;not&gt; 更改为&lt;rsel:not&gt; 并将&lt;exists&gt; 更改为&lt;rsel:exists&gt;
  • 谢谢,但我只是通过使用资源的集合操作得到它。所需文件之间的差异以及所需文件与现有文件的交集必须为零。这适用于 1.7.1,并且不需要额外的名称空间。您对资源集合的提示非常有用!谢谢!

标签: ant


【解决方案1】:

您可以使用 pathconvert 将文件字符串转换为可在文件集中使用的文件集包含模式;例如:

<pathconvert property="includespattern" pathsep=",">
    <path path="a.jar;b.jar;c.jar;nonexisting.jar" />
    <globmapper from="${basedir}/*" to="*" handledirsep="true" />
</pathconvert>

<fileset id="your.fileset" dir="${basedir}" includes="${includespattern}"/>
    <!-- fileset will only contain existing files --> 
<echo>${toString:your.fileset}</echo>

【讨论】:

  • 这不是问题的答案,而是替代解决方案的好主意。
猜你喜欢
  • 2022-01-17
  • 2012-01-11
  • 1970-01-01
  • 2010-11-25
  • 2014-03-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多