2009-07-19 95 views
5

我试图在当前目录下创建一个以逗号分隔的文件或目录列表。例如,假设我有以下文件夹结构:使用Ant生成以逗号分隔的文件列表

 
Root 
-- Directory1 
-- Directory2 
... 

我想生成包含“Directory1,Directory2”的变量或属性。我试过在<dirset dir="." includes="*">上迭代(使用ant-contrib“for”任务),但是这会产生绝对路径;然后,我使用“基本名称”任务提取文件名,但是这又会生成输出属性。由于属性是不可变的,我在练习中得到的是“Directory1,Directory1,...”

有没有更好的方法来做到这一点,还是必须编写一个Java扩展来为我做这件事?

回答

10

pathconvert任务可以使用任意分隔符来格式化dirset:

<dirset id="dirs" dir="." includes="*"/> 
<pathconvert dirsep="/" pathsep="," property="dirs" refid="dirs"/> 
<echo message="${dirs}"/> 
+0

花了一点努力(使用globmapper和其他一些小的黑客),我敢肯定你在你的例子中用pathsep切换dirsep,但你指出我需要的确切方向。谢谢! – 2009-07-19 18:18:51

4

只是确认乔恩的回答是正是我需要的(作为起点),以及。

<dirset id="dirset.sandbox" dir="${sandbox.dir}" includes="*"> 
    <exclude name="output"/> 
</dirset> 
<pathconvert pathsep=" " property="dirs.sandbox" refid="dirset.sandbox"> 
    <mapper type="flatten"/> 
</pathconvert> 
<echo message="[*** the sandbox dir list is ${dirs.sandbox} ***]"/> 

sandbox.dir是一个类似于/ root/build/workspace的绝对路径,它包含多个子目录。 输出是这些目录的空格分隔列表。