JDKその他の管理のためにSDKMAN!:SDK Managerを利用する
様々な言語やプラットフォームでプログラミングをやっていると、気付いたら自分の使っている言語のバージョンが古くなっていることがよくある。大抵の場合、新しいバージョンがでたからと言って先方から「あんたのそれ、古いよ」とは言ってくれないのである。
とはいえ拠点、プラットフォーム間でSDKのバージョンが異なっていたりすると思わぬ落とし穴になりかねないのでSDKのバージョン管理は真面目な開発者にとっては必須である。
そこでJVM系のSDKMAN! = The Software Development Kit Managerを利用することにした。
Javaはもちろん、KotlinやScalaなどが対象である。どんな「SDK」が対象か、詳細は後の項目に記す。
まずは本家サイトに行ってインストールする。
使い方
使い方は以下のようになる。
Usage: sdk <command> [candidate] [version]
sdk offline <enable|disable>
commands:
install or i <candidate> [version]
uninstall or rm <candidate> <version>
list or ls [candidate]
use or u <candidate> [version]
default or d <candidate> [version]
current or c [candidate]
upgrade or ug [candidate]
version or v
broadcast or b
help or h
offline [enable|disable]
selfupdate [force]
update
flush <broadcast|archives|temp>
candidate : the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
use list command for comprehensive list of candidates
eg: $ sdk list
version : where optional, defaults to latest stable if not provided
eg: $ sdk install groovy
具体的にJava(JDK)でやってみる。
まずsdk list javaで利用できるSDKが列挙され、今入っている、使っている等の情報が示される。下の例では8.0.191-oracleだけが入っていて、使われている。
そこで8.0.201-oracleに上げるためにsdk use 8.0.201-oracleを実行するとインストールされていないのでインストールするかを確認してくる。
$ sdk list java
================================================================================
Available Java Versions
================================================================================
13.ea.02-open 1.0.0-rc-9-grl
12.ea.26-open 1.0.0-rc-8-grl
11.0.1-zulu
11.0.1-open
10.0.2-zulu
10.0.2-open
9.0.7-zulu
9.0.4-open
8.0.201-oracle
8.0.192-zulu
8.0.192-amzn
> + 8.0.191-oracle
7.0.181-zulu
1.0.0-rc-11-grl
1.0.0-rc-10-grl
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
$ sdk use java 8.0.201-oracle
Stop! java 8.0.201-oracle is not installed.
Do you want to install it now? (Y/n): y
Oracle requires that you agree with the Oracle Binary Code License Agreement
prior to installation. The license agreement can be found at:
http://www.oracle.com/technetwork/java/javase/terms/license/index.html
Do you agree to the terms of this agreement? (Y/n): y
Downloading: java 8.0.201-oracle
In progress...
######################################################################### 100.0%
We will be needing super powers...
Password:
Repackaging Java 8.0.201...
Attaching to the DMG...
# 中略
Done repackaging...
Cleaning up cookie...
Installing: java 8.0.201-oracle
Done installing!
Using java version 8.0.201-oracle in this shell.
ちなみにもう一度sdk list javaを実行すると元のJDKはそのまま残り、利用中のJDKが新しい方になっていることが確認できる。
これの良いところの一つにアンインストールせずに別のバージョンを利用することができる点がある。
「SDKを新しいバージョンに切り替えたら動作がおかしくなった」と言ったときに本当にそうなのか?の確認が容易なのである。
SDKMAN!で管理できるSDK類
2019/01/21現在、SDKMAN!で管理できるのは以下のようになっている。
JVM系のプロジェクトを「仕事」で使っている人には馴染みのあるものも少なくないはず。
- Ant
- AsciidoctorJ
- Bpipe
- Ceylon
- CRaSH
- CUBA CLI
- CXF
- Gaiden
- Glide
- Gradle
- Grails
- Groovy
- GroovyServ
- Infrastructor
- Java
- JBake
- Kotlin
- kscript
- Lazybones
- Leiningen
- Maven
- Micronaut
- sbt
- Scala
- Spark
- Spring Boot
- Sshoogr
- Vert.x
- VisualVM
SDKMAN!のメリット
SDKMAN!で管理するメリットはバージョン管理が容易になることであるが、それ以外にプラットフォーム間(macOS, LinuxなどUNIX系のOS)で同じコマンドを利用してバージョン管理できるメリットも小さくない。
さらにシェルスクリプトで書いてしまえば、新しい環境を構築してもすぐに開発環境を他と合わせることができる。
特にデメリットはないが、Haskellも対応してくれればもっとよかった。(あれは独自の環境構築システムを持っているから・・・。)