问题可能不是很清楚,所以让我用一个例子来说明我的意思。假设我要复制几个文件夹:
<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)?
答案 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复制到目标目录...