有没有办法从Ant脚本中动态构建Ant元素?

时间:2012-04-18 15:26:55

标签: ant

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

<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)?

2 个答案:

答案 0 :(得分:2)

因为你无法修改输入文本文件的格式,所以我能想到做你想做的最好的方法是:

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

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

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

答案 1 :(得分:0)

我能想到的最好的方法就是使用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文件,并且对于每个文件中的每一行,都要从该行指定的dir复制到目标目录...