今回は、開発環境で「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」クラスが見つからない例外が発生していました。
「javax.annotation.Generated」クラスが見つからないのは、「Java11」以降で「Eclipse」を実行している環境では、対象クラスが削除されているためです。
「Java11」では、さまざまなクラスが削除されています。「javax.annotation.Generated」クラスが含まれている「java.xml.ws.annotation」モジュールも削除対象のひとつです。削除されたモジュールについては、次のサイトを参考にしてください。
解決方法
Doma2バージョンアップ
「Doma2」を「2.18.0」以降のバージョンにすることで、注釈処理が修正されているため「Java11」以降でも注釈処理によるソースファイル作成に成功します。
修正に内容については、次の「Doma2」サイトのリリースノート、プルリクエストを参考にしてください。
Eclipseバージョンダウン
「Eclipse」を「Java8」で実行することで、注釈処理によるソースファイル作成に成功します。
「Pleiades All in One Eclipse」を使用する場合は、バージョンを「2018-09」にすることで、「Java8」で「Eclipse」を実行することができます。次の「Pleiades All in One Eclipse」のサイトからダウンロードすることができます。
ビルドスクリプトで作成
ビルドスクリプト(Maven、Gradleなど)を使用して開発している場合は、Javaのバージョンを指定することができるため「Java8」を指定して実行することで、注釈処理によるソースファイル作成に成功します。
作成したソースファイルを開発環境にコピーすることで、ソースファイル作成に成功した状態にすることができます。
注釈処理によりソースファイル作成が頻繁に発生しない場合は、この方法でも開発は進められると思います。
まとめ
「Doma2」でソースファイル作成に失敗する場合は、次の条件がすべてあてはまるかを確認してみてください。
- 「Java11」以降で「Eclipse」を実行している。
- 「Doam2」が「2.18.0」以前のバージョンを使用している。
あてはまる場合は、ソースファイル作成に失敗することがあります。