【Eclipse】Doma2の注釈処理でソースファイル作成に失敗する

今回は、開発環境で「Eclipse」+「Doma2」を使用しているとき、注釈処理(Pluggable Annotation Processing API)によるソースファイル作成に失敗する原因と解決方法を紹介していきます。

スポンサーリンク

検証環境

検証に使用した環境/ライブラリを次に記載します。

  • Pleiades All in One Eclipse
    • バージョン:2021-12
  • Doma2
    • バージョン:2.17.0

問題内容

注釈処理によるソースファイル作成の失敗は、ファイル内容がパッケージ名だけになる、次のような状態をいいます。

【ソースファイル作成の失敗例】

package com.fumidzuki.dao;

/** */

注釈処理によるソースファイル作成の成功は、ファイル内容にクラス名などの情報が出力されている、次のような状態をいいます。

【ソースファイル作成の成功例】

package com.fumidzuki.dao;

/** */
@javax.annotation.Generated(value = { "Doma", "2.17.0" })
public class ExampleDaoImpl extends org.seasar.doma.internal.jdbc.dao.AbstractDao implements com.fumidzuki.dao.ExampleDao {
  ...処理内容は省略します。
}

成功例の内容は、処理内容などは割愛しています。

問題原因

検証環境の「Eclipse」+「Doma2」を使用して注釈処理を実行すると、次のようなエラーが発生しました。

java.lang.Exception: java.lang.NoClassDefFoundError: javax/annotation/Generated

エラー内容は、「javax.annotation.Generated」クラスが見つからない例外が発生していました。

「Eclipse」でエラー内容を確認する場合は、次の手順で確認することができます。

  1. 「メニューバー」から「ウィンドウ」を選択します。
  2. 「ビューの表示」、「エラー・ログ」の順番で選択します。

「javax.annotation.Generated」クラスが見つからないのは、「Java11」以降で「Eclipse」を実行している環境では、対象クラスが削除されているためです。

「Java11」では、さまざまなクラスが削除されています。「javax.annotation.Generated」クラスが含まれている「java.xml.ws.annotation」モジュールも削除対象のひとつです。削除されたモジュールについては、次のサイトを参考にしてください。

Oracle JDK 移行ガイド
このガイドは、アプリケーションをOracle JDK 8からOracle JDK 10に移行する場合に役立ちます。

解決方法

Doma2バージョンアップ

「Doma2」を「2.18.0」以降のバージョンにすることで、注釈処理が修正されているため「Java11」以降でも注釈処理によるソースファイル作成に成功します。

修正に内容については、次の「Doma2」サイトのリリースノート、プルリクエストを参考にしてください。

Release 2.18.0 · domaframework/doma
#208 Use javax.annotation.processing.Generated on JDK 9 #207 If the result of the expression is Long, it is evaluated as Float. #206 Fix a wrong annotation para...
Use `javax.annotation.processing.Generated` on JDK 9 by nakamura-to · Pull Request #208 · domaframework/doma

Eclipseバージョンダウン

「Eclipse」を「Java8」で実行することで、注釈処理によるソースファイル作成に成功します。

「Pleiades All in One Eclipse」を使用する場合は、バージョンを「2018-09」にすることで、「Java8」で「Eclipse」を実行することができます。次の「Pleiades All in One Eclipse」のサイトからダウンロードすることができます。

Pleiades All in One Eclipse 2018 ダウンロード

ビルドスクリプトで作成

ビルドスクリプト(Maven、Gradleなど)を使用して開発している場合は、Javaのバージョンを指定することができるため「Java8」を指定して実行することで、注釈処理によるソースファイル作成に成功します。

作成したソースファイルを開発環境にコピーすることで、ソースファイル作成に成功した状態にすることができます。

この方法を使用する場合は、「Eclipse」の注釈処理から「Doma2」の設定を無効にしてください。注釈処理が有効のままにすると、ビルドするたびに新しいソースファイル作成の処理が実行されてしまいます。

注釈処理によりソースファイル作成が頻繁に発生しない場合は、この方法でも開発は進められると思います。

まとめ

「Doma2」でソースファイル作成に失敗する場合は、次の条件がすべてあてはまるかを確認してみてください。

  1. 「Java11」以降で「Eclipse」を実行している。
  2. 「Doam2」が「2.18.0」以前のバージョンを使用している。

あてはまる場合は、ソースファイル作成に失敗することがあります。