Создание dirset, который включает подпапки папок - PullRequest
4 голосов
/ 09 ноября 2011

У меня есть свойство, называемое source-location, и оно содержит разделенный запятыми список папок, в которых можно найти исходный код.

    source-locations=src,other_src_dir,yet_another_dir

В одной из моих задач с муравьем я использую дирсет, подобный этому:

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

Моя проблема в том, что в этом случае только каталоги, перечисленные в свойстве source-location, будут частью dirset, и мне также нужны все подкаталоги этих каталогов. Как мне это сделать?

Любой вклад приветствуется! Спасибо!

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Вы можете попробовать это:

<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 и var задача из библиотеки Ant-Contrib .

1 голос
/ 09 ноября 2011

Пример ниже.

<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}" />

...