3

这个问题可能不是很清楚,所以让我用一个例子来说明我的意思。假设我要复制几个文件夹:

<copy todir="..." overwrite="true">
    <fileset dir="dir1" />
    <fileset dir="dir2" />
    <fileset dir="dir3" />
    ...
</copy>

但我不需要在脚本中硬编码这些文件夹,而是需要从如下所示的文本文件中加载它们:

Directories to copy:
  dir1
  dir2
  dir3
  ...

所以我需要以某种方式加载文本文件,解析它,找出应该复制哪些目录以及其中的构造元素<copy>并且<fileset>只是示例)。

是否可以在 Ant中实现这一点,而无需对我的 build.xml 文件执行一些转换(例如 XSLT)?

4

2 回答 2

2

由于您无法修改输入文本文件的格式,因此我能想到的最佳方法是:

1.创建一个 [shell|Perl|etc] 脚本,从您的原始文件生成 XML。这可以是 XML 片段或完整的 Ant 文件。

2.在调用 Ant 之前运行该脚本。

3.将生成的 XML 导入您的 Ant 文件中(请参阅http://ant.apache.org/faq.html#xml-entity-include上的相关 Ant 文档)。

于 2012-04-18T16:59:50.513 回答
0

我能想到的完成你想用 ant 做的最好的方法是使用ant contrib foreach 任务来读取文件并在每一行上执行操作。蚂蚁目标看起来像这样:

<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<path id="dirlists">
    <fileset dir="${basedir}/dirlists">
        <include name="**/*.txt" />
    </fileset>
</path>

<target name="runCopy">
    <foreach target="_copyDir" param="dirPath">
        <path refid="dirlists"/>
    </foreach>
</target>   

<target name="_copyDir">
    <copy todir="..." overwrite="true">
        <fileset dir="${dirPath}"/>
    </copy>
</target>

这将读取名为 dirlists 的文件夹中的任何 .txt 文件,并为每个文件中的每一行从该行指定的目录复制到目标目录...

于 2012-04-18T15:50:46.500 回答