8
5

GradleプロジェクトのJava17 -> 21にしたときにハマった

Posted at

背景

ある個人開発の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

8
5
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
8
5