続いて、先ほどの説明に沿ってプロジェクトのビルド設定ファイルであるpom.xmlを修正する。java.netリポジトリからプラグインをダウンロードできるように、pom.xmlのルート要素直下の任意の場所(の間が良いだろう)に以下のコードを追加する。

<pluginRepositories>
    <pluginRepository>
        <id>maven2-repository.dev.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>https://maven2-repository.dev.java.net/nonav/repository</url> ← Java.netのリポジトリURLを指定
        <layout>default</layout>      
    </pluginRepository>
</pluginRepositories>

次にAnnotation mock builderプラグインをプロジェクトで使用する旨と、アノテーションモックを作成する対象となるJarファイルを指定する。

<plugins>
  ……
  <plugin>
    <groupId>org.jvnet.annotation-mock-builder</groupId>
    <artifactId>annotation-mock-builder</artifactId>    ← プラグインの指定
    <version>1.1</version>
    <configuration>
      <!-- 作成するアノテーションモックのパッケージ -->
      <packageName>example</packageName>
      <!-- モックを作成する対象のJarファイルを指定。ここではJAXB2.0を指定 -->
      <jar>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.0</version>
      </jar>
    </configuration>
  </plugin>
  ……
</plugins>

以上のようにファイルを変更して保存したら、次のコマンドを実行する。

mvn annotation-mock-builder:build-mocks

初回のみJarファイルのダウンロードが行われ、その後、Jarファイルからクラスファイルの内容が読み取られ、アノテーションモックが作成された旨が出力されるはずだ。

アノテーションモックは、target/annotation-mocks以下に作成される。確認してみてほしい。

アノテーションモックの可能性

アノテーションモックは、さまざまな可能性を秘めた汎用的な技術でありこれから注目されることは間違いない。川口氏の構想では、JDKの既存クラスを代表とする「アノテーションを自由に付与できないクラス」に対して、XML等の外部ファイルを用いて「アノテーションを付与したのと同じ効果」を持たせられるような"カスタムアノテーションリーダー"などが挙がっている。

アノテーションモックを実装するうえでは、いくつかの規約を守る必要があり、手作業で作成するのはなかなか面倒だが、Annotation mock builderの登場と今後のプロジェクトの発展により、そうした煩雑な作業から開発者が解放される可能性は高い。

なお、川口氏はAnnotation mock builderを用いてJAXB 2.1のアノテーションモックを公式に提供するプロジェクトも同時に開始しただけではなく、JAX-WSのMavenプラグインのバージョン1.2(バグフィックスが主な修正)や、継続インテグレーションツールであるHudsonの新バージョンもリリースした。その旺盛な創作意欲にはただただ感服するばかりである。