2018-04-30T09:47:32.000+09:00

SDKMANのJDKをIntelliJ IDEAで使う

JVM言語のSDKをSDKMANというツールで異なるバージョンと共存・管理するのが流行っているように感じます。
しかしながらこのような実行環境管理ツールは OSごとに整備された通常のSDK配置とは異なるため、IntelliJ IDEAなどのIDEは自動的に検索することができません。

www.jetbrains.com

この記事では、SDKMANで配置されたJava Development KitをIntelliJ IDEAから利用するための手順をプログラミング初学者でも理解できるよう可能な限り丁寧に記します。
余談ですが、SDKMANの正式名称は "SDKMAN!" みたいです。この記事では基本省略しています。

そもそも初学者がSDKMANを利用するケースは (私の生徒たち以外に) 存在するのでしょうか...?

IntelliJ IDEAでプロジェクトの標準設定を開く

IntelliJ IDEAが利用するSDKは、IDEA上で「プロジェクトの標準設定」として直接設定する必要があります。起動時の画面下部にある Configure より、Project Defaults > Project Structure と進み、クリックし開きます。

f:id:S64:20180430175757p:plain

SDKを追加する

Default Project Structureというウィンドウが開かれたら、左側ペインのPlatform Settings内のSDKsをクリックします。
右側ペインにの上部にあるプラスボタン (Add New SDK) をクリックし、JDKをクリックします。

f:id:S64:20180430180425p:plain

ディレクトリを指定する

ここからは利用しているプラットフォームにより異なります。

Ubuntu等Linuxディストリビューションの場合 通常SDKMANによるJDKは/home/<yourusername>/.sdkman/candidates/java内で管理されています。
.sdkmanディレクトリが隠しファイルであるため、表示してあげると指定しやすくなります。

ファイルピッカー上に「隠しファイルを表示する」ボタンがあるためそれをクリックし有効にし、ファイルツリー上で上記ディレクトリを辿ります。
ディレクトリ内にインストール済みJDKが表示されるため、current以外からIDEA上で利用したいものを選択し、OKしてください。

f:id:S64:20180430181823p:plain

macOSの場合

通常SDKMANによるJDKは/Users/<yourusername>/.sdkman/candidates/java内で管理されています。
.sdkmanディレクトリが隠しファイルであるため、表示してあげると指定しやすくなります。

ファイルピッカーのウィンドウ上でCmd + Shift + .のショートカットキーを入力すると、隠しファイルが表示されます。この状態のファイルツリー上で、上記ディレクトリを辿ります。
ディレクトリ内にインストール済みJDKが表示されるため、current以外からIDEA上で利用したいものを選択し、Openしてください。

f:id:S64:20180430182816p:plain

今回の場合、sdk install javaで自動的に選択, インストールされたJDKが8.0.163-zuluだったため、これを選択しています。

f:id:S64:20180430183031p:plain

OKをクリックし、ウィンドウを閉じます。
以上でSDKMANで追加したJDKを IntelliJ IDEAに認識させることができました。

プロジェクト作成時にJDKを選択する

以降はJDKの追加手順から離れるため、おおまかな手順のみの解説をします。
Create New Projectなどの項目からプロジェクトを作成し、Javaのテンプレートを選択した場合を想定します。

この際に右側ペインに表示されるProject SDKという項目で、さきほど追加したJDKを選ぶことができます。

f:id:S64:20180430183513p:plain

開発するプロジェクトで適切なJDKを選択し、Nextで先へ進めればよいです。

新たにSDKMANで追加したJDKを認識させる

それ以外にもSDKMAN (またはそれ以外) でインストールしたJDKがある場合、または今後新たにJDKを追加した場合、同じ手順を繰り返すことでIDEAへ認識させることができます。それらを利用する際は、プロジェクト作成ウィザード上のProject SDKから選択することができます。