背景
ある個人開発のJava(Gradle)プロジェクトをJava17 -> 21に引き上げると、プロジェクトから魑魅魍魎が発生してしまいました。
これを解消すべく、以下を試していきました。
私の環境はIntelliJのCommunity版を使用しております。
やったこと
build.gradleのsourceCompatibilityを21に引き上げ
java {
sourceCompatibility = '21'
}
これだけだと、Gradleタスク実行時に
エラー: 21は無効なソース・リリースです
が発生しました。
IntelliJのGradle設定変更
Ctrl + Alt + Sで設定を開き、「ビルド、実行、デプロイ」-> 「ビルドツール」 -> 「Gradle」のGradle JVMを21に変更。
しかしこれでも以下が発生した。
Execution failed for task ':compileJava'.
> java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'
lombokの更新
どうやらlombokを1.18.30以上に引き上げないと上記エラーが出るようです。
素直にbuild.gradleのdependenciesを変更し、
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
としました。すると次のエラーが再び発生。
Unsupported class file major version 65
Gradle wrapperのバージョン引きげ
gradle-wrapper.propertiesの以下を7.6.1 -> 8.4に変更
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
これでTaskが正しく実行されるようになりました。
参考
https://volkruss.com/posts/a001/
https://stackoverflow.com/questions/77171270/compilation-error-after-upgrading-to-jdk-21-nosuchfielderror-jcimport-does-n
https://tech.omablo.com/archives/865