Как мне составить список имен файлов? - PullRequest
4 голосов
/ 26 января 2010

Мне нужно написать цель Ant, которая добавляет (разделенный запятыми) список имен файлов «.jar» из папки в переменную, которая позже используется в качестве входных данных для внешней утилиты. Я сталкиваюсь с барьерами охвата и неизменности. У меня есть доступ к ant-contrib, но, к сожалению, версия, с которой я застрял, не имеет доступа к задаче 'for'. Вот что у меня есть:

<target name="getPrependJars">
    <var name="prependJars" value="" />
    <foreach param="file" target="appendJarPath">
        <path>
            <fileset dir="${project.name}/hotfixes">
                <include name="*.jar"/>
            </fileset>
        </path>         
    </foreach>

    <echo message="result ${prependJars}" />
</target>


<target name="appendJarPath">
    <if>
        <equals arg1="${prependJars}" arg2="" />
        <then>
            <var name="prependJars" value="-prependJars ${file}" />
        </then>
        <else>
            <var name="prependJars" value="${prependJars},${file}" />
        </else>
    </if>       
</target>

Кажется, что 'appendJarPath' изменяет только 'prependJars' в пределах своей области видимости. В качестве теста я попытался использовать 'antcallback', который работает для одного целевого вызова, но не очень мне помогает с моим списком файлов.

Я понимаю, что я немного работаю против зерна, и в большинстве случаев желательна лексическая область применения, но я действительно хотел бы заставить это работать так или иначе. У кого-нибудь есть креативные идеи для решения этой проблемы?

Ответы [ 3 ]

9 голосов
/ 26 января 2010

Вы можете использовать задачу pathconvert , которая позволяет указывать символ разделителя в виде запятой.

<target name="getPrependJars">
    <fileset id="appendJars" dir="${project.name}/hotfixes">
        <include name="*.jar" />
    </fileset>
    <pathconvert property="prependJars" refid="appendJars" pathsep="," />

    <echo message="prependJars: ${prependJars}" />
</target>
2 голосов
/ 26 января 2010

Если вам нужен формат системного пути, вы можете использовать следующее:

<target name="getPrependJars">
    <path id="prepend.jars.path">
        <fileset dir="${project.name}/hotfixes">
            <include name="*.jar"/>
        </fileset>
    </path>         
    <property name="prependJars" value="${toString:prepend.jars.path}" />

    <echo message="result ${prependJars}" />
</target>
2 голосов
/ 26 января 2010

Я бы просто написал пользовательскую задачу на Java, которая (1) принимает имя папки, (2) собирает строку результата и (3) сохраняет ее в свойстве $ {prependJars}.

В ant вы просто определяете задачу (taskdef) и впоследствии используете, как и все другие задачи.

Я сделал это однажды, когда столкнулся с проблемой симлиара, и обнаружил, что это очень, очень легко.

Вот учебник .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...