ヒトリ歩き

愚痴とかいろいろ書きます

SDKMANをインストールしてみた

SDKMANが気になっていたので、インストールしてみました。

SDKMANとは

Unixベースで、複数のSDKのバージョンを管理するためのツール。 SDKのインストールやバージョンの切替え、削除、SDKの一覧表示などをCLIベースで提供しています。

sdkman.io

SDKMANの特徴

開発者による、開発者のために

HOMEやPATH環境変数の変更や、アーカイブの展開、目的のバージョンをダウンロードページで探し回る必要がありません。

マルチプラットフォーム

Mac OSX、LinuxCygwinSolarisFreeBSDといったUnixベースのシステムで動作可能です。

Javaの全てに行き届く

Java,Groovy,Sacla,Kotlinと言ったJVMで動作するSDKをインストールできます。 Ant,Gradle,Grails,Maven,SBT,Spark,SpringBoot,Vert.Xなどもサポートします。

軽量である

bashで実装されており、curlコマンドと、zip/unzipがあれば動作可能です。 ZSHでも同様に動作します。

早速、インストールしてみる。

さて、SDKMANをインストールしてみます。 インストーラをダウンロードして実行。

$ curl -s "https://get.sdkman.io" | bash

・・・・(省略)

Download script archive...
######################################################################## 100.0%
Extract script archive...
Install scripts...
Set version to 5.7.4+362 ...
Attempt update of interactive bash profile on regular UNIX...
Added sdkman init snippet to /home/vagrant/.bashrc
Attempt update of zsh profile...
Updated existing /home/vagrant/.zshrc



All done!


Please open a new terminal, or run the following in the existing one:

    source "/home/vagrant/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!

ファイルをロードする

$ source "/home/vagrant/.sdkman/bin/sdkman-init.sh"

インストールが成功しているかの確認のために、バージョンを出力する。

$ sdk version
==== BROADCAST =================================================================
* 2020-04-03: Grails 4.0.3 released on SDKMAN! #grailsfw
* 2020-04-03: Micronaut 1.3.4 released on SDKMAN! #micronautfw
* 2020-04-02: Micronaut 2.0.0.M2 released on SDKMAN! #micronautfw
================================================================================

SDKMAN 5.7.4+362

インストール完了!!

インストールは簡単でした。

候補の一覧を表示

sdk list java でインストール可能なJDKの一覧を表示します。 javaの部分をgroovyとするとインストール可能なgroovyが出てきます。

$ sdk list java
================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 14.0.0.j9    | adpt    |            | 14.0.0.j9-adpt      
               |     | 14.0.0.hs    | adpt    |            | 14.0.0.hs-adpt      
               |     | 13.0.2.j9    | adpt    |            | 13.0.2.j9-adpt      
               |     | 13.0.2.hs    | adpt    |            | 13.0.2.hs-adpt      
               |     | 12.0.2.j9    | adpt    |            | 12.0.2.j9-adpt      
               |     | 12.0.2.hs    | adpt    |            | 12.0.2.hs-adpt      
               |     | 11.0.6.j9    | adpt    |            | 11.0.6.j9-adpt      
               |     | 11.0.6.hs    | adpt    |            | 11.0.6.hs-adpt      
               |     | 8.0.242.j9   | adpt    |            | 8.0.242.j9-adpt
・・・(省略)・・・

JDKをインストール

sdk install java バージョン-提供元 を指定してJavaをインストールします。

$ sdk install  java 14.0.0-open

Downloading: java 14.0.0-open

In progress...

######################################################################## 100.0%

Repackaging Java 14.0.0-open...

Done repackaging...

Installing: java 14.0.0-open
Done installing!


Setting java 14.0.0-open as default.

JDKの切替え

sdk use target version で使用するJDKを切り替えることが出来ます。 javaのopenjdk 14.0.0 に切り替える場合は、sdk use java 14.0.0-open で実行します。

$ sdk use java 14.0.0-open

Using java version 14.0.0-open in this shell.

sdk use は、ローカル環境に対象のバージョンがインストールされている前提のため、インストールしていない バージョンへの切替はエラーになります。

$ sdk use java 13.0.2-open

Stop! java 13.0.2-open is not installed.

JDKの削除

ローカル環境からJDKを削除するには、sdk uninstall を実行します。

$ sdk uninstall java 13.0.2.j9-adpt

Unselecting java 13.0.2.j9-adpt...

Uninstalling java 13.0.2.j9-adpt...

使用したいJDKがない時は手動でインストールしてSDKMANに管理させる

listでJDKの一覧は出力されるのですが、使用するバージョンがない場合は、SDKMANからインストールすることが出来ません。

そうなると、自分でJDKをインストールしないといけなくなります。 そうなると、HOMEやPATH環境変数の切替えが面倒ですよね??

そんな時は、無理やりSDKMANに管理させる方法があります。 (多分、非公式??)

Javaであれば、$HOME/.sdkman/candidates/java 配下に、JDKをインストールします。 今回は、JDK9+181 をインストールしてみます。 JDKを配置するディレクトリ名は、バージョン-dist に合合わせる方が良いので、JDK9+181であれば、9.0.181-open とします。

対象のディレクトリに移動し、JDKをダウンロードします。

$ cd $HOME/.sdkman/candidates/java
$ wget https://download.java.net/openjdk/jdk9/ri/jdk-9+181_linux-x64_ri.zip

ダウンロードしたJDKを展開し、9.0.181-openフォルダに配置します。

バージョン-dist配下に、binフォルダなどがある状態にします。

$ unzip jdk-9+181_linux-x64_ri.zip
$ mv java-se-9-ri/jdk-9 9.0.181-open
$ rm -rf java-se-9-ri jdk-9+181_linux-x64_ri.zip

sdk list java で一覧を出力し、インストールされたことを確認します。

手動でインストールしたものには、Status欄が「local only」となっています。

$ sdk list java
・・・(省略)・・・
Java.net      |     | 15.ea.17     | open    |            | 15.ea.17-open       
              | >>> | 14.0.0       | open    | installed  | 14.0.0-open         
              |     | 13.0.2       | open    |            | 13.0.2-open         
              |     | 12.0.2       | open    |            | 12.0.2-open         
              |     | 11.0.6       | open    |            | 11.0.6-open         
              |     | 10.0.2       | open    |            | 10.0.2-open         
              |     | 9.0.181      | open    | local only | 9.0.181-open        
              |     | 9.0.4        | open    |            | 9.0.4-open     
・・・(省略)・・・

手動インストールしたJDK9+181に切り替えが出来ることを確認します。

$ sdk use java 9.0.181-open
Setting java version 9.0.181-open as default.

Using java version 9.0.181-open in this shell.
$ sdk current java

Using java version 9.0.181-open
$ java --version
openjdk 9
OpenJDK Runtime Environment (build 9+181)
OpenJDK 64-Bit Server VM (build 9+181, mixed mode)

出来た!!!

まとめ

SDKMANのインストールから使い方を理解できました。 リストに出力されたバージョンはオンラインでインストール出来るので良いが、リストに表示されていない バージョンがオンラインでインストールできないのはチョット残念。(実は他のやり方があるとか??) 業務で使えなさそうと思ったが、手動でインストールして管理させる方法を見つけることができたので、 Javaの切替が簡単に出来るだけでも十分に良いツールだと思うので、ガリガリ使いたい。

ただ、どうにかリストに載っていないバージョンをオンラインでインストールできないだろうか・・・