Есть ли устоявшийся способ совместного использования целей 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, у меня все равно были бы проблемы, поскольку к тому времени, когда я разрешил бы зависимости, я должен был бы находиться внутри цели в моем build.xml и не мог импортировать (из-за к упомянутому выше ограничению).
Есть ли лучшее решение для того, что я пытаюсь достичь?