Open2

備忘録:intelliJでJavaのバージョン依存関係の解決手順

ふじしろふじしろ

概要

IntelliJでjavaのバージョンの依存関係とか解決する手順をいつも失念するので一旦整理しておくもの。
JVMとかSDKとかJDKとかの理解がふわふわなのでいつかそのあたりの理解をふかめる必要がありそう。。。

詳細

GradleをSyncしたときなどで以下のエラー発生

A problem occurred configuring root project 'example-project'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.4.
     Required by:
         root project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.3.4
      > Dependency requires at least JVM runtime version 17. This build uses a Java 11 JVM.

Dependency requires at least JVM runtime version 17. This build uses a Java 11 JVM.
訳:依存関係には、少なくともJVMランタイム・バージョン17が必要です。このビルドではJava 11 JVMを使用しています。

gradle-pluginの3.3.4では少なくともJVM runtime versionの17が必要とされているが、今の設定ではバージョン11を使っているのでエラーが出る。

確認ポイント

IntelliJのJDK設定

Project Structure⌘ + ;
Projectタブ -> Project SDK:java 17になっているか確認

Gradle JVMの設定

Settings⌘ + ,
Build, Execution, Deployment -> Build Tools -> Gradle -> Gradle JVM を Java 17 に設定(たぶんProject SDKにすればプロジェクトの設定に準じる形になるのでそうすれば良い気が吸う)

Gradleの設定

build.gradleのjavaのバージョンを17にする

ふじしろふじしろ

gradleのsyncではエラーにならないし、taskから実行すると成功するのに、コマンドラインで./graldew bootRunすると同じエラーが出る場合

コマンドラインがJAVA_HOMEを参照しているせいでうまくいかない説がある

$ echo $JAVA_HOME

ただし、sdkmanを使っている場合は、/Users/user/.sdkman/candidates/java/currentが表示されるだけになったりするので、そのときは以下で確認

$ java -version

バージョンが違ったら、以下のコマンドでインストール可能なjavaをリスト表示できるので、その中からプロジェクトで使っているjavaとおなじものを探す

$ sdk list java

探したら以下のコマンドでインストール

$ sdk install java {Identifier}

これでコマンドラインからもbootRunできるようになった