倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

プラグインを作ろう!(15) -- @component:Maven2 内のコンポーネントを取得する

前々回、Mojo 内からPOM ファイル内の要素(をモデル化したオブジェクト)を取得する方法を見ました。

今回は POM ファイル内ではなく、Maven2 内で動いているコンポーネントを取得する方法を見てみましょう。 ただし、取得の仕方は簡単ですが、どうやって使うのかはいまいちよく分かりません・・・

★取得できるコンポーネント

取得できるコンポーネントは static final な java.lang.String フィールド「ROLE」が定義されているインターフェースです。 Maven2JavaDocこちら

コンポーネントの型への依存性★

まずは、取得したいコンポーネントの型(クラス)を使用できるようにしなければなりません。 これには、プラグインを作成しているプロジェクトの POM ファイルに、適当な依存性*1を付加します。

例えば、「org.apache.maven.plugin.PluginManager」というコンポーネントを取得するためには、それを含んでいるプロジェクト「maven-project」への依存性を POM ファイルへ付加します:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-project</artifactId>
      <version>2.0.8</version>
    </dependency>
  </dependencies>
</project>

コンポーネントの取得方法★

Mojo 内での設定は、単に取得したいコンポーネントの型のフィールドを定義して、「@component アノテーション」を付加するだけです。 「PluginManager」というコンポーネントを取得するためには、

/** @component */
private PluginManager pm;

とします。

*1:Maven2API は幾つかのモジュールに分割して開発しているようなので、依存性に含めるのは、全ての Maven2 API よりも必要なクラスを含むモジュールだけにしておくほうが良いでしょう。 各モジュールの JavaDocこちらのページの「Modules」メニューからモジュールを選び、メニュー内で[Project Documentation] → [Project Reports] → [JavaDocs] と選択していけば閲覧できます。 ちなみに、[JavaDocs] の代わりに [Source Xref] を選択するとソースコードも見ることができます。