はじめに
JDK 21の環境でgoogle-java-formatをCLIから利用した際に遭遇したエラーと、その対応方法を紹介します。
発生したエラー
JDK 21環境でgoogle-java-format v1.14.0を使い、以下のようなコマンドを実行したところ、エラーが発生しました。
java -jar google-java-format-1.14.0-all-deps.jar --aosp --replace Sample.java
実際のエラーメッセージ
error: class com.google.googlejavaformat.java.JavaInput (in unnamed module @0x6c40afbf) cannot access class com.sun.tools.javac.parser.Tokens$TokenKind (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.parser to unnamed module @0x6c40afbf
java.lang.IllegalAccessError: class com.google.googlejavaformat.java.JavaInput...
これはJDKのモジュールシステム(JEP 396による内部APIの非公開化)によって、google-java-formatがJDK内部のAPIにアクセスできなくなったために起こっていたようでした。
解決方法
google-java-format のリリースノートを確認したところ、v1.19.1 で JDK 21 に正式対応したことが明記されていました。今回のように、使用しているJDKのバージョンに合うgoogle-java-formatのバージョンを知りたい場合は、リリースノートにしっかり記載されているので、内容を追っていくことで確認できます。
-
v1.19.1 リリースノート
- 「Java 21対応」を公式に明記
v1.25.2でも問題なく動作することを確認済みです。
正しいCLIコマンド例(macOSの場合)
最新バージョンのjarファイルを使用すると問題が解消します。
java -jar google-java-format-1.25.2-all-deps.jar --aosp --replace Sample.java
Homebrewでインストールする場合
Homebrew経由でJDKとgoogle-java-formatをインストールすることもできます。
brew install openjdk google-java-format
この場合、以下のようにコマンドを実行します。
google-java-format --aosp --replace Sample.java
まとめ
- JDK 21環境でgoogle-java-formatを使う場合、 v1.19.1以上が必須
- CLIでの利用には追加の設定は不要
参考資料