Ant: преобразование пути в отдельные свойства - PullRequest
1 голос
/ 22 сентября 2011

У меня есть папка, содержащая несколько файлов jar, которые все должны идти в classpath:

<path id="my.classpath">
    <fileset dir="/tmp/mylibs" includes="*.jar" />
</path>

Теперь я хотел бы иметь возможность ссылаться на все эти файлы jar как отдельное свойство, например, если у меня естьдва jar-файла foo.jar и bar.jar, тогда я хотел бы иметь возможность ссылаться на них как

${foo.jar} (== /tmp/mylibs/foo.jar) 
${bar.jar} (== /tmp/mylibs/bar.jar)

Возможно ли это как-то в Ant?

Спасибо, Питер

Ответы [ 3 ]

0 голосов
/ 23 сентября 2011

У Ivy есть задача artifactproperty , предназначенная для вас.

Единственный недостаток этого решения в том, что оно предполагает, что вы используете ivy для разрешения зависимостей и управления вашим путем к классам.

0 голосов
/ 23 сентября 2011

Простой способ получить весь путь к классам в одном свойстве:

<path id="my.classpath">
    <fileset dir="/tmp/mylibs" includes="*.jar" />
</path>

<property name="classpath.property" refid="my.classpath"/>

<echo message="Classpath = &quot;${classpath.property}&quot;"/>

Я полагаю, что это будет работать в файле Eclipse .classpath. У меня нет ни одного передо мной прямо сейчас. Если вам нужно манипулировать им, вы можете сделать это с помощью задачи <concat> с цепями фильтров.

0 голосов
/ 22 сентября 2011

С помощью ant-contrib вы можете попробовать это:

<target name="test">
    <ac:for param="file">
        <fileset dir="/tmp/mylibs" includes="*.jar"/>
        <sequential>
                <antcall target="setImpl">
                    <param name="file" value="@{file}"/>
                </antcall>
                <echo>param: @{file}</echo>
        </sequential>
    </ac:for>
</target>

<target name="setImpl">
    <property name="filename" value="${file}" />
    <echo>property: ${filename}</echo>
</target>

Для переопределения значения свойства (если вам нужно) вы также можете использовать ant-contrib

...