Преобразование набора файлов Ant в несколько аргументов применения - PullRequest
17 голосов
/ 27 января 2010

У меня есть несколько файлов:

dir/foo.txt
dir/bar.txt
dir/foobar.txt

В задаче Ant apply я хочу передать список файлов в качестве аргументов:

<target name="atask">
    <apply executable="${cmd}" parallel="false" verbose="true">
        <arg value="-in"/>
        <srcfile/>
        <arg value="dir/foo.txt"/>
        <arg value="dir/bar.txt"/>
        <arg value="dir/foobar.txt"/>

        <fileset dir="${list.dir}" includes="*.list"/>
    </apply>
</target>

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

<fileset dir="dir" includes="*.txt"/>

Как я могу преобразовать этот набор файлов в arg элементов - по одному на файл? Что-то вроде:

<arg>
    <fileset dir="dir" includes="*.txt"/>
</arg>

вместо

<arg value="dir/foo.txt"/>
<arg value="dir/bar.txt"/>
<arg value="dir/foobar.txt"/>

(Этот пример не работает, потому что arg не поддерживает набор файлов )

1 Ответ

27 голосов
/ 28 января 2010

Вот пример, иллюстрирующий использование задачи pathconvert .

Преобразованный путь передается в исполняемый файл с помощью <arg line />.

Предполагается, что в путях к вашим *.txt файлам не должно быть пробелов.

<target name="atask">
    <fileset dir="dir" id="myTxts">
        <include name="*.txt" />
    </fileset>
    <pathconvert property="cmdTxts" refid="myTxts" pathsep=" " />

    <apply executable="${cmd}" parallel="false" verbose="true">
        <arg value="-in" />
        <srcfile />
        <arg line="${cmdTxts}" />

        <fileset dir="${list.dir}" includes="*.list" />
    </apply>
</target>

Если вы можете столкнуться с пробелами, это должно сделать: как указано выше, но изменить (надеюсь, очевидно, какие строки) на:

    <pathconvert property="cmdTxts" refid="myTxts" pathsep="' '" />

и

        <arg line="'${cmdTxts}'"/>
...