创建包含文件夹子文件夹的dirset

时间:2011-11-09 13:10:50

标签: ant directory subdirectory

我有一个名为source-locations的属性,它包含一个逗号分隔的文件夹列表,可以找到源代码。

    source-locations=src,other_src_dir,yet_another_dir

在我的一项蚂蚁任务中,我使用这样的dirset:

    <dirset dir="${basedir}" includes="${source-locations}"/>

我的问题是,在这种情况下,只有source-locations属性中列出的目录才会成为dirset的一部分,我也需要这些目录的所有子目录。我怎么能做到这一点?

任何输入都表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:1)

以下示例。

<mkdir dir="dir1" />
<mkdir dir="dir2" />
<mkdir dir="dir3" />
<mkdir dir="dir1/dir1a" />
<mkdir dir="dir1/dir1b" />
<mkdir dir="dir1/dir1c" />
<mkdir dir="dir2/dir2e" />
<mkdir dir="dir2/dir2f" />
<mkdir dir="dir2/dir2g" />
<mkdir dir="dir3/dir3h" />
<mkdir dir="dir3/dir3i" />
<mkdir dir="dir3/dir3j" />

<property name="source-locations" value="dir1,dir2,dir3" />

<pathconvert property="source-locations_mod" pathsep=",">
  <regexpmapper from="^(.*)$" to="\1/\*\*" handledirsep="true" />
  <map from="${basedir}/" to="" />
  <dirset dir="${basedir}" includes="${source-locations}" />
</pathconvert>
<echo message="source-locations_mod: ${source-locations_mod}" />

<dirset id="dirset" dir="${basedir}" includes="${source-locations_mod}"/>

<property name="dirs" refid="dirset" />
<echo message="dirs: ${dirs}" />

答案 1 :(得分:1)

你可以试试这个:

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="path.antcontrib"/>

<target name="test">
    <property name="source-locations" value="src,other_src_dir,yet_another_dir"/>

    <!--Replace comma symbol to the `/**,` string and save new expression in to the source-locations_mod property-->
    <propertyregex property="source-locations_mod"
           input="${source-locations}"
           regexp=","
           replace="/**,"
           global="true" />

    <!--Add finally `/**` string to the source-locations_mod property. Was used var task to prevent property immutable -->
    <var name="source-locations_mod" value="${source-locations_mod}/**"/>

    <!--New source-locations_mod property was used-->
    <dirset id="source.set" dir="${root.folder}" includes="${source-locations_mod}"/>

    <!--Check the result-->
    <pathconvert pathsep="${line.separator}"
             property="dir.name" 
             refid="source.set">
        <mapper type="identity" />
    </pathconvert>
    <echo>Folders: ${dir.name}</echo>
</target>

我使用了propertyregex库中的varAnt-Contrib任务。