Apache AntのProjectHelper
は、ビルドファイルの解析と、ビルドワークフローを表すJavaインスタンスの作成を担当します。また、解析可能なファイルの種類と、デフォルトの入力ファイルとして想定されるファイル名を通知します。
AntのデフォルトのProjectHelper
(org.apache.tools.ant.helper.ProjectHelper2
)は、通常のbuild.xml
ファイルを解析します。コマンドラインでビルドファイルが指定されていない場合、build.xml
という名前のファイルが見つかることを想定します。
このような抽象化の直接的な利点は、AntがXML以外の記述言語を理解できるようにすることが可能になることです。純粋なJavaフロントエンドとGroovyフロントエンドの実験が行われています(これらの詳細については、開発者メーリングリストにお問い合わせください)。
Ant 1.8.2以降、importタスクは、インポートされたファイルを解析するために適切なヘルパーを使用しようとします。そのため、異なる言語で異なるビルドファイルを記述し、それらを相互にインポートすることが可能です。
AntはProjectHelper
の複数の実装を認識しており、各ビルドファイルにどれを使用するかを決定する必要があります。
起動時に、Antは見つかったすべての実装をリストし、それらが見つかったのと同じ順序で内部の「リポジトリ」に保持します。
org.apache.tools.ant.ProjectHelper
によって宣言されたものです(Javaシステムプロパティを参照)。ProjectHelper
サービス宣言を検索します。クラスパス内でMETA-INF/services/org.apache.tools.ant.ProjectHelperファイルを検索します。このファイルには、インスタンス化するProjectHelper
の実装の完全修飾名が含まれています。ProjectHelper
サービス宣言も検索します。ProjectHelper
を追加します。ProjectHelper
のインスタンス化中にエラーが発生した場合、Antはエラーをログに記録しますが、停止しません。ProjectHelper
内部の「リポジトリ」に関する詳細なデバッグ情報が必要な場合は、システムプロパティant.project-helper-repo.debug
を使用し、それをtrue
に設定します。完全なスタックトレースも出力されます。
Antがファイルを解析する必要がある場合、ProjectHelper
リポジトリに、入力ファイルを解析できる実装を見つけるように要求します。実際には、順序付けられたリストを反復処理し、supportsBuildFile(File buildFile)
にtrue
を返す最初の実装が選択されます。
Antが起動され、入力ファイルが指定されていない場合、デフォルトの入力ファイルを検索します。ProjectHelper
のリストを反復処理し、実際に存在するデフォルトファイルを想定している最初のものを選択します。
クラスorg.apache.tools.ant.ProjectHelper
は、実装されることが期待されるAPIです。そのため、この抽象クラスを拡張して独自のProjectHelper
を作成します。その後、少なくとも関数parse(Project project, Object source)
を実装する必要があります。また、実装はAntによってインスタンス化され、引数のないデフォルトコンストラクターが想定されていることに注意してください。
ヘルパーの機能と期待される内容を定義するのに役立つ関数がいくつかあります。
getDefaultBuildFile()
:ファイルが指定されていない場合に想定されるファイル名を定義します。supportsBuildFile(File buildFile)
:パーサーが入力ファイルを解析できるかどうかを定義します。canParseAntlibDescriptor(URL url)
:実装が指定されたAntlib記述子を解析できるかどうか。基底クラスはfalseを返します。
parseAntlibDescriptor(Project containingProject, URL source)
:実装が前のメソッドに対してtrueを返した場合、Antlib記述子を実際に解析するために呼び出されます。
実装の準備ができたので、Antに宣言する必要があります。ここでは3つの解決策があります。
org.apache.tools.ant.ProjectHelper
を使用します(Javaシステムプロパティも参照)。