从<patternset>中获取值

时间:2018-07-05 20:24:21

标签: ant

我们已经拥有的东西

因此,我们有一些文件名需要在很多地方使用,但是我们强烈希望只列出一个地方列出这些名称,以避免使列表不同步。为此,我们使用patternset任务:

<!-- the number of files here can change wildly -->
<patternset id="pattern.of.specific.files">
  <include name="specific-file-#1"/>
  <include name="specific-file-#2"/>
  <include name="specific-file-#3"/>
</patternset>

我们在其他地方构建fileset,因为这些文件可能位于多个位置,并且这些位置是通过程序确定的:

<fileset id="fileset.of.specific.files" dir="${... this changes ...}">
  <patternset refid="pattern.of.specific.files"/>
</fileset>

<fileset id="fileset where stuff is going" dir="${... some other place ...}">
  <patternset refid="pattern.of.specific.files"/>
</fileset>

然后我们可以在构建filesetpath或其他任何东西时使用这些copy所有这些都很好。

我们想要得到的东西

我们现在需要将该文件名列表传递给外部程序。我的第一次尝试是

<!-- we have several calls to this program already
     so we wrapped it in its own task  -->
<task.for.running.the.external.program>
  <arg value="${pattern.of.specific.files}"/>
</task.for.running.the.external.program>

知道多个name都将作为单个字符串传递到接收程序的参数向量中-很好,我们可以将其拆分为空白或其他任何内容。

那没有用。该程序将文字字符串${pattern.of.specific.files}作为其参数。叹气。

我的下一个尝试使用了“真正需要更好地记录此文档”功能:

<arg value="${toString:pattern.of.specific.files}"/>

那...行得通。传递的字符串为

patternSet{ includes: [specific-file-#1, specific-file-#2, specific-file-#3] excludes: [] }

好的,如果没有更好的方法,可以使 起作用。坦白说,那太可怕了。

我坚信可以通过一定程度的间接解决所有计算机科学问题的公理。因此,我尝试echo将列表添加到具有固定名称的临时文件中,然后让外部程序仅从该文件中读取文件名:

<echo file=" some known name goes here ">
  ${toString:pattern.of.specific.files}
</echo>

同一patternSet{ includes....已写入文件。我应该有这个期望。

是否存在可以将patternsetrefid并发出名称的 ?是文件,还是属性,或其他 else ,然后我们可以使用标准的“ $ {property_name}”扩展名将其转换为值,而无需包含toString中的所有多余文本?可能有一个任务。也许还有toString以外的一些财产助手?

我的一位同事开玩笑说,使用sed从Ant构建文件中简单提取<include name=.../>行,并从每行中引用的内容可能更干净。它开始吸引我了。

0 个答案:

没有答案