Существует ли общепринятый способ разделения 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"/>
«Грязная» часть этого заключается в том, что я должен выполнить вышеуказанные шаги вне цели , поскольку задача import должна находиться на верхнем уровне. Кроме того, мне все еще нужно включить этот XML во все файлы build.xml, которые в нем нуждаются (т.е. все еще есть некоторое количество дубликатов).
Кроме того, могут быть дополнительные ситуации, когда у меня могут быть общие (не плющевые) задачи, которые я хотел бы импортировать. Если бы я выполнял эти задачи с помощью управления зависимостями Айви, у меня все равно были бы проблемы, поскольку к тому времени, как я бы разрешил зависимости, я должен был бы быть внутри цели в моем build.xml и не мог импортировать (из-за к указанному выше ограничению).
Есть ли лучшее решение для того, чего я пытаюсь достичь?