SDKのバージョン管理:SDK Manager

投稿者: | 2019年1月18日

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系のプロジェクトを「仕事」で使っている人には馴染みのあるものも少なくないはず。

  1. Ant
  2. AsciidoctorJ
  3. Bpipe
  4. Ceylon
  5. CRaSH
  6. CUBA CLI
  7. CXF
  8. Gaiden
  9. Glide
  10. Gradle
  11. Grails
  12. Groovy
  13. GroovyServ
  14. Infrastructor
  15. Java
  16. JBake
  17. Kotlin
  18. kscript
  19. Lazybones
  20. Leiningen
  21. Maven
  22. Micronaut
  23. sbt
  24. Scala
  25. Spark
  26. Spring Boot
  27. Sshoogr
  28. Vert.x
  29. VisualVM

SDKMAN!のメリット

SDKMAN!で管理するメリットはバージョン管理が容易になることであるが、それ以外にプラットフォーム間(macOS, LinuxなどUNIX系のOS)で同じコマンドを利用してバージョン管理できるメリットも小さくない。

さらにシェルスクリプトで書いてしまえば、新しい環境を構築してもすぐに開発環境を他と合わせることができる。

特にデメリットはないが、Haskellも対応してくれればもっとよかった。(あれは独自の環境構築システムを持っているから・・・。)

コメントを残す