Typedef

説明

現在のプロジェクトにタスクまたはデータ型の定義を追加し、この新しい型またはタスクを現在のプロジェクトで使用できるようにします。

タスクは、org.apache.tools.ant.Task を拡張するクラス、またはアダプタークラスを使用してタスクとして適合させることができるクラスです。

データ型は、プロジェクトレベルで定義し、id 属性を介して参照できるパスファイルセットなどです。カスタムデータ型は、通常、それらを有効に活用するためにカスタムタスクを必要とします。

定義を行うには、このデータ型を一意に識別する名前と、この型を実装するクラスの完全な名前(パッケージ名を含む)の2つの属性が必要です。

また、file 属性または resource 属性を使用して、定義のグループを一度に定義することもできます。これらの属性は、Java プロパティファイルまたは XML 形式のファイルを指します。

プロパティファイルの場合、各行は「名前=クラス名」の形式で単一のデータ型を定義します。

typename=fully.qualified.java.classname

XML 形式は、Antlib セクションで説明されています。

複数の taskdef または typedef タスクと同じクラスパスを共有するタスクまたは型を定義する場合、対応するクラスは異なる Java クラスローダーによってロードされます。異なるクラスローダーによってロードされた同じ名前の2つのクラスは、JVM の観点からは同じクラスではなく、静的変数を共有せず、これらのクラスのインスタンスは、「同じ名前の他のクラス」によって定義されたインスタンスの private メソッドまたは属性にアクセスできません。それらは同じ Java パッケージにも属しておらず、パッケージ private コードにもアクセスできません。

共有 Java コードを介して相互に連携する複数のタスク/型をロードする最良の方法は、resource 属性と antlib 記述子を使用することです。これが不可能な場合、2番目に良い選択肢は、loaderref 属性を使用し、すべての typedef/taskdef に同じ名前を指定することです。これにより、クラスは同じ ClassLoader を共有します。loaderref 属性が機能するためには、typedef/taskdef タスクは同一のクラスパス定義(パスコンポーネントの順序を含む)を使用する必要があることに注意してください。

パラメータ

属性 説明 必須
name データ型名 file 属性または resource 属性が指定されていない限り、必須です。
classname データ型を実装する完全なクラス名
file 定義を読み込むファイルの名前。 いいえ
resource 定義を読み込むリソースの名前。この名前のリソースがクラスパスに複数見つかり、format が「properties」の場合、最初のリソースがロードされます。それ以外の場合、そのようなすべてのリソースがロードされます。 いいえ
format ファイルまたはリソースの形式。値は「properties」または「xml」です。値が「properties」の場合、ファイル/リソースは名前とクラス名のペアを含むプロパティファイルです。値が「xml」の場合、ファイル/リソースはAntlibに従って構造化された XML ファイル/リソースです。デフォルトは「properties」です。ただし、ファイル/リソース名が .xml で終わる場合は、format 属性の値は「xml」になります。 Ant 1.6 以降 いいえ
classpath classname を検索するときに使用するクラスパス。 いいえ
classpathref classname を検索するときに使用するクラスパスへの参照。 いいえ
loaderRef 指定されたクラスパスから構築された、クラスのロードに使用されるローダーの名前。複数のタスク/型を同じローダーでロードできるようにして、相互に呼び出すことができるようにするために使用します。 Ant 1.5 以降 いいえ
onerror 型の定義に失敗した場合に実行するアクション。値は、「fail」:ビルド例外を発生させる、「report」:警告を出力するが続行する、「ignore」:何もしない、です。 Ant 1.6 以降、追加の値として「failall」があります。fail のすべての動作に加えて、リソースまたはファイルが見つからない場合はリソースまたは file 属性のビルド例外も発生させます。 いいえ。デフォルトは「fail」です(Ant 1.7 以降)。
adapter 定義されたクラスを別のインターフェース/クラスに適合させるために使用されるクラス。アダプタークラスは、インターフェース org.apache.tools.ant.TypeAdapter を実装する必要があります。アダプタークラスは、定義されたクラスが属性「adaptto」で定義されたクラスを実装/拡張していない限り、定義されたクラスをラップするために使用されます。「adaptto」が設定されていない場合、定義されたクラスは常にラップされます。 Ant 1.6 以降 いいえ
adaptto この属性は、adapter 属性と組み合わせて使用​​されます。定義されたクラスがこの属性で指定されたインターフェース/クラスを実装/拡張していない場合、アダプタークラスを使用してクラスがラップされます。 Ant 1.6 以降 いいえ
uri この定義が存在する必要がある URI。 Ant 1.6 以降 いいえ

ネストされた要素として指定されたパラメータ

classpath

Typedefclasspath 属性は、パスのような構造 であり、ネストされた classpath 要素を介して設定することもできます。

次のフラグメントは、urlset という名前の型を定義します。

<typedef name="urlset" classname="com.mydomain.URLSet"/>

データ型は Ant で使用できるようになりました。クラス com.mydomain.URLSet はこの型を実装します。

Task を拡張し、org.apache.tools.ant.TypeAdapter を実装するクラス org.acme.ant.RunnableAdapter と、execute() メソッドでプロキシオブジェクトの run() を呼び出すと仮定すると、Runnable クラスを Ant タスクとして使用できます。次のフラグメントは、runclock という名前のタスクを定義します。

<typedef name="runclock"
         classname="com.acme.ant.RunClock"
         adapter="org.acme.ant.RunnableAdapter"/>

次のフラグメントは、2つの定義をロードするための classpathref および loaderref の使用法を示しています。

<path id="lib.path">
    <fileset dir="lib" includes="lib/*.jar"/>
</path>

<typedef name="filter1"
         classname="org.acme.filters.Filter1"
         classpathref="lib.path"
         loaderref="lib.path.loader"/>
<typedef name="filter2"
         classname="org.acme.filters.Filter2"
         loaderref="lib.path.loader"/>

antlib を特別な XML 名前空間にロードする場合、uri 属性が重要です

<project xmlns:antcontrib="antlib:net.sf.antcontrib">
     <taskdef uri="antlib:net.sf.antcontrib"
              resource="net/sf/antcontrib/antlib.xml"
              classpath="path/to/ant-contrib.jar"/>

ここでは、名前空間宣言 xmlns:antcontrib="antlib:net.sf.antcontrib" により、Ant-Contrib Antlib のタスクと型を <antcontrib:if> のように antcontrib プレフィックスで使用できます。XML 名前空間の通常のルールが適用され、任意の要素にプレフィックスを宣言して、宣言された要素とそのすべての子要素で使用できるようにすることができます。