プロジェクト間で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 タスクが最上位にある必要があるため、target の外で上記の手順を実行する必要があることです。さらに、必要なすべての build.xml ファイルにこの XML を含める必要があります (つまり、まだ多少の重複があります)。
その上、インポートしたい一般的な (Ivy 以外の) タスクがある可能性がある追加の状況があるかもしれません。Ivy の依存関係管理を使用してこれらのタスクを提供する場合、依存関係を解決するまでに build.xml のターゲット内にいる必要があり、インポートできないため、まだ問題があります (上記の制約に)。
私が達成しようとしていることに対するより良い解決策はありますか?