LoginSignup
3
2

More than 5 years have passed since last update.

Eclipse で自作の注釈処理を動かそうとして詰まったところ

Posted at

自作の注釈処理を作って Eclipse で動かせるようにしようとしたらいろいろ詰まったのでメモ。

環境

Java

openjdk 10.0.2

Eclipse

Photon (4.8.0)Pleiades All in One

OS

Windows 10

前提

注釈処理自体の話や Eclipse で動かす方法についての説明は Pluggable Annotation Processing API 使い方メモ - Qiita を参照。

ロードに失敗する

症状

apt.jpg

注釈処理を設定した方のプロジェクトで「注釈プロセッサー・ファクトリー ... をロードできませんでした」というエラーがでる。
詳細な情報がないため、何が起こっているのかわからず途方にくれた。

原因

  • Eclipse を動かしている JVM のバージョンが注釈処理を書いたコードよりも古い
    • いろいろ試しているなかで、古いバージョンの Eclipse でも注釈処理が動かない状態になった
    • その Eclipse では詳細なエラーメッセージが表示されて、「Unsupported major.minor version xxx」のエラーが発生していた
    • プロジェクトで使用する Java のバージョンは統一していたので、注釈処理を動かしているプログラム = Eclipse の JVM のバージョンが古いことが原因っぽいことに気づいた

Eclipse を動かしている JVM のバージョンを確認する

  • Eclipse が動いているマシン上でコマンドラインを立ち上げて、 jcmd を実行する
> jcmd
6184 sun.tools.jcmd.JCmd
18860
  • プロセスID しか出力されていないのが Eclipse の Java プロセス
  • このプロセスID を引数にして VM.version を出力する
> jcmd 18860 VM.version
18860:
Java HotSpot(TM) 64-Bit Server VM version 25.162-b12
JDK 8.0_162
  • 8 で動いているのがわかる。

対応方法

  • Eclipse を、注釈処理のコードのバージョンと互換性のあるバージョンの Java で動かす

NoClassDefFoundError が発生する

状況

  • 注釈処理の中で JavaPoet を使ってソースコードを自動生成しようとした

症状

apt.jpg

apt.jpg

  • 注釈処理のなかで使っている JavaPoet のクラスが見つからずに NoClassDefFoundError になる

原因

  • Eclipse の注釈処理の設定で、ファクトリー・パスに依存するライブラリが追加されていない

対応方法

  • 注釈処理中で使用しているライブラリ(この場合 JavaPoet)もファクトリー・パスに追加する

apt.jpg

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2