最初に<taskdef>
、Ivy タスクを指すように を定義する必要があります。
<property environment="env"/>
<property name="ivy.home" value="${env_IVY_HOME}"/>
<taskdef resource="org/apache/ivy/ant/antlib.xml">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
これにより、Ivy タスクにアクセスできるようになります。これらのタスクは次のように使用します。
<cachepath pathid="main.classpath" conf="compile"/>
問題は、Ivy タスク名が他の Ant タスクと衝突する可能性があることです。たとえば、Ivy タスクがあります<report>
。これを解決するには、Ivy 名前空間を作成します。<project>
これを行うには、次のように、エンティティの名前空間に参照を配置します。
<project name="my.proj" default="package" basedir="."
xmlns:ivy="antlib:org.apache.ivy.ant"/>
これで、Ivy タスクを定義するときに、名前空間へのそのantlib:org.apache.ivy.ant
参照を使用できます。ivy
前と同じ taskdef ですが、uri
フィールドがあります。
<property environment="env"/>
<property name="ivy.home" value="${env_IVY_HOME}"/>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
ちなみに、それは特別なことではありませんuri
。私はこれを行うことができました:
<project name="my.proj" default="package" basename="."
xmlns:ivy="pastrami:with.mustard">
[...]
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="pastrami:with.mustard">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
ポイントは、タスク名の前にivy:
. これの代わりに:
<cachepath pathid="main.classpath" conf="compile"/>
これを行うことができます:
<ivy:cachepath pathid="main.classpath" conf="compile"/>
そして、それが Ivy Ant タスクへのアクセスを取得する方法です。
これで、Ivy Ant タスクにアクセスできるようになりました。ivysettings.xml
ファイルを定義し、<ivy:settings/>
タスクを使用してそこを指す必要があります。
<ivy:settings file="${ivy.home}/ivysettings.xml"/>
ivysettings.xml
Ivy には、ワールド ワイドの Maven リポジトリ システムを指すデフォルトファイルが組み込まれています。会社全体の Maven リポジトリがない場合は、デフォルトのivysettings.xml
ファイルを使用できます。
<ivy:settings/>
それはとても簡単です。
それが完了したら、ファイルを読み込んで解決する必要があります。ivy.xml
ファイルは通常、プロジェクトのルートにあるbuild.xml
ファイルと同じディレクトリにあります。
基本的に、ivy.xml
ファイルには、プロジェクトに取り込みたいサードパーティの jar への参照が含まれています。例えば:
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.17" conf="compile->default"/>
<dependency org="junit" name="junit" rev="4.10" conf="test->default"/>
</dependencies>
これが言っているのは、log4j.jar
コンパイル (およびテストのコンパイル) には (revision 1.2.17) が必要junit.jar
であり、テスト コードのコンパイルには (revision.4.10) が必要だということです。
これは、構成を Maven の構成にcompile->default
マッピングしたものです (これは、Jar とそれが依存する可能性のある他のすべての jar が必要であることを示しています。compile
default
私のcompile
設定はどこから来たのですか?で定義しますivy.xml
。10 個の標準構成があります。これもあなたのivy.xml
ファイルに入ります:
<configurations>
<conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
<conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
<conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
<conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
<conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
<conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
<conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
<conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
<conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
<conf name="optional" visibility="public" description="contains all optional dependencies"/>
</configurations>
任意の構成名を使用できますが、これらはデフォルトの Maven 構成にマップされ、広く使用されています。
ivy.xml
ファイルを定義したら、依存関係を解決するために使用できます<ivy.resolve>
。
<ivy:resolve/>
したがって、次のようになります。
<taskdef>
Ivy Ant タスクをビルドにbuild.xml
組み込むための使用方法。
- Ivy Ant タスク
<ivy:settings>
を使用して Ivy を構成する方法。
<ivy:resolve/>
ファイルを読み取り、ivy.xml
サードパーティの jar 依存関係を解決するために使用する方法。
ここで、おそらくこれらの jar ファイルを実際に使用したいと思うでしょう。これを行うには、次の 3 つの方法があります。
<ivy:cachepath pathid="main.classpath" conf="compile"/>
このタスクは、ファイルの構成にある jar を指す<ivy:cachepath/>
クラスパス (この場合はmain.classpathと呼ばれます) を作成します。これはほとんどの場合に使用されます。ivy.xml
compile
ファイルセットが必要な場合は、これを使用できます。
<ivy:cachefileset setid="compile.fileset" conf="compile"/>
この場合、refid のファイルセットが作成されますcompile.fileset
。
場合によっては、プロジェクトに jar を持ち込む必要があります。たとえば、war または ear ファイルを作成する場合は、jar ファイルを同封します。その場合、これを使用できます:
<property name="lib.dir" value="${target.dir}/lib"/>
<ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"
conf="runtime"/>
これにより、jar が${lib.dir}
ディレクトリにフェッチされるため、それらを war または ear に含めることができます。
長い回答で申し訳ありませんが、カバーする手順がたくさんあります。マニングの著書『Ant in Action』には、アイビーに関する章全体が含まれていることを強くお勧めします。