Como posso compartilhar melhor os destinos do Ant entre os projetos?

Existe uma maneira bem estabelecida de compartilharFormiga alvos entre projetos? Eu tenho uma solução atualmente, mas é um pouco deselegante. Aqui está o que estou fazendo até agora.

Eu tenho um arquivo chamadoivy-tasks.xml hospedado em um servidor em nossa rede. Esse arquivo contém, entre outros alvos, tarefas padronizadas para gerenciar dependências do projeto comHera. Por exemplo:

<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>

A razão pela qual este arquivo está hospedado é porque eunão faça quer:

Verifique o arquivo em todos os projetos que precisarem - isso resultará em duplicação, dificultando a manutenção das metas.Meu build.xml depende da verificação de um projeto do controle de origem - isso fará com que a compilação tenha mais XML no nível superior apenas para acessar o arquivo.

O que eu faço com esse arquivo no build.xmls dos meus projetos é o seguinte:

<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"/>

A parte "suja" sobre isso é que eu tenho que fazer os passos acimafora de um alvo, porque otarefa de importação deve estar no nível superior. Além disso, ainda preciso incluir esse XML em todos os arquivos build.xml que precisam dele (ou seja, ainda há alguma duplicação).

Além disso, pode haver situações adicionais em que eu possa ter tarefas comuns (não-Ivy) que gostaria de importar. Se eu fosse fornecer essas tarefas usando o gerenciamento de dependências da Ivy, ainda teria problemas, pois, quando resolvesse as dependências, teria que estar dentro de um destino em meu build.xml e não conseguir importar (devido para a restrição mencionada acima).

Existe uma solução melhor para o que estou tentando realizar?

questionAnswers(4)

yourAnswerToTheQuestion