Есть ли устоявшийся способ совместного использования Ant целей между проектами? У меня есть решение в настоящее время, но это немного неэлегантно. Вот что я делаю до сих пор.
У меня есть файл под названием ivy-tasks.xml
, размещенный на сервере в нашей сети. Этот файл содержит среди других целей шаблонные задачи для управления зависимостями проекта с Ivy. Например:
<project name="ant-ivy-tasks" default="init-ivy"
xmlns:ivy="antlib:org.apache.ivy.ant">
...
<target name="ivy-download" unless="skip.ivy.download">
<mkdir dir="${ivy.jar.dir}"/>
<echo message="Installing ivy..."/>
<get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}" usetimestamp="true"/>
</target>
<target name="ivy-init" depends="ivy-download"
description="-> Defines ivy tasks and loads global settings">
<path id="ivy.lib.path">
<fileset dir="${ivy.jar.dir}" includes="*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant"
classpathref="ivy.lib.path"/>
<ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
</target>
...
</project>
Причина, по которой этот файл размещен, заключается в том, что я не хочу:
- Проверьте файл в каждом проекте, который ему нужен - это приведет к дублированию, что затруднит сохранение целей.
- Зависит ли мой файл build.xml от проверки проекта от исходного элемента управления - это заставит сборку больше XML на верхнем уровне просто получить доступ к файлу.
То, что я делаю с этим файлом в моих проектах build.xmls, соответствует строкам:
<property name="download.dir" location="download"/>
<mkdir dir="${download.dir}"/>
<echo message="Downloading import files to ${download.dir}"/>
<get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
<import file="${download.dir}/ivy-tasks.xml"/>
"грязная" часть об этом заключается в том, что я должен выполнить вышеуказанные шаги за пределами целевого объекта, потому что задача импорта должна быть в на высшем уровне. Кроме того, я все равно должен включить этот XML во все файлы build.xml, которые ему нужны (т.е. Все еще некоторое количество дублирования).
Кроме того, могут возникнуть дополнительные ситуации, когда у меня могут быть общие (не связанные с Ivy) задачи, которые я бы хотел импортировать. Если бы я должен был выполнять эти задачи с помощью управления зависимостями Ivy, у меня все еще были бы проблемы, так как к тому времени, когда я разрешил зависимости, которые я должен был бы находиться внутри цели в моем файле build.xml и не смог импортировать (из-за к указанному выше ограничению).
Есть ли лучшее решение для того, что я пытаюсь выполнить?