SDKMan 이용하기
SDKMan
SDK man 은 개발 환경에 따라 SDK를 변경하면서 사용할 수 있는 매우 유용한 유틸이다.
복수개의 SDK(Software Development Took Kit) 을 설치해두고, 스위치하면서 사용할 수 있는 장점이 있다.
SDKMan 에서 내용을 확인해 보자.
Install
SDKMan 은 Linux 계열의 OS에서 호환되는 툴이며, Mac OSX, Linux, WSL, Cygwin, Solaris, FreeBSD 등에서 설치가 가능하다.
curl -s "https://get.sdkman.io" | bash
명령을 실행하면 화려한 텍스트 이미지와 함께 SDK가 설치된다.
아래 커맨드로 sdkman 을 초기화 해주고, 환경에 등록해준다.
source "$HOME/.sdkman/bin/sdkman-init.sh"
정상 등록 체크하기
sdk version
SDKMAN 5.11.4+709
5.11.4+709 버젼이 설치된것을 확인할 수 있다.
sdk help 정보 보기
sdk help
아래 내용과 같은 결과를 확인할 수 있다.
Usage: sdk <command> [candidate] [version]
sdk offline <enable|disable>
commands:
install or i <candidate> [version] [local-path]
uninstall or rm <candidate> <version>
list or ls [candidate]
use or u <candidate> <version>
completion <bash|zsh>
config
default or d <candidate> [version]
home or h <candidate> <version>
env or e [init|install|clear]
current or c [candidate]
upgrade or ug [candidate]
version or v
broadcast or b
help
offline [enable|disable]
selfupdate [force]
update
flush [archives|tmp|broadcast|version]
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
local-path : optional path to an existing local installation
eg: $ sdk install groovy 2.4.13-local /opt/groovy-2.4.13
사용방법
사용방법은 아래와 같이 확인할 수 있다.
Usage: sdk <command> [candidate] [version]
sdk offline <enable|disable>
- command: 커맨드는 설치, 삭제, 사용 등의 명령이 올 수 있다.
- candidate: 이것은 제공하는 SDK의 종류를 나타낸다. groovy, scala, grails, gradle, kotlin 등이 있을 수 있으며, 자세한 사항은 SDKMan sdklist 에서 확인할 수 있다.
- version: 설치할 버젼을 선택할 수 있다.
설치 가능한 Java SDK 확인하기.
이제 Java 를 설치할 것이기 때문에 다음 명령어로 설치가능한 Java SDK를 살펴보자.
sdk list java
결과보기
================================================================================
Available Java Versions
================================================================================
Vendor | Use | Version | Dist | Status | Identifier
--------------------------------------------------------------------------------
AdoptOpenJDK | | 16.0.1.j9 | adpt | | 16.0.1.j9-adpt
| | 16.0.1.hs | adpt | | 16.0.1.hs-adpt
| | 16.0.0.j9 | adpt | | 16.0.0.j9-adpt
| | 16.0.0.hs | adpt | | 16.0.0.hs-adpt
| | 11.0.11.j9 | adpt | | 11.0.11.j9-adpt
| | 11.0.11.hs | adpt | | 11.0.11.hs-adpt
| | 11.0.10.j9 | adpt | | 11.0.10.j9-adpt
| | 11.0.10.hs | adpt | | 11.0.10.hs-adpt
| | 8.0.292.j9 | adpt | | 8.0.292.j9-adpt
| | 8.0.292.hs | adpt | | 8.0.292.hs-adpt
| | 8.0.282.j9 | adpt | | 8.0.282.j9-adpt
| | 8.0.282.hs | adpt | | 8.0.282.hs-adpt
Amazon | | 16.0.1.9.1 | amzn | | 16.0.1.9.1-amzn
| | 16.0.0.36.1 | amzn | | 16.0.0.36.1-amzn
| | 15.0.2.7.1 | amzn | | 15.0.2.7.1-amzn
| | 11.0.11.9.1 | amzn | | 11.0.11.9.1-amzn
| | 11.0.10.9.1 | amzn | | 11.0.10.9.1-amzn
| | 8.292.10.1 | amzn | | 8.292.10.1-amzn
| | 8.282.08.1 | amzn | | 8.282.08.1-amzn
Azul Zulu | | 16.0.1 | zulu | | 16.0.1-zulu
| | 16.0.0 | zulu | | 16.0.0-zulu
| | 16.0.0.fx | zulu | | 16.0.0.fx-zulu
| | 15.0.2.fx | zulu | | 15.0.2.fx-zulu
| | 11.0.11 | zulu | | 11.0.11-zulu
| | 11.0.10 | zulu | | 11.0.10-zulu
| | 11.0.10.fx | zulu | | 11.0.10.fx-zulu
| | 8.0.292 | zulu | | 8.0.292-zulu
| | 8.0.282 | zulu | | 8.0.282-zulu
| | 8.0.282.fx | zulu | | 8.0.282.fx-zulu
| | 7.0.302 | zulu | | 7.0.302-zulu
| | 7.0.292 | zulu | | 7.0.292-zulu
BellSoft | | 16.0.1.fx | librca | | 16.0.1.fx-librca
| | 16.0.1 | librca | | 16.0.1-librca
| | 16.0.0.fx | librca | | 16.0.0.fx-librca
| | 16.0.0 | librca | | 16.0.0-librca
| | 11.0.11.fx | librca | | 11.0.11.fx-librca
| | 11.0.11 | librca | | 11.0.11-librca
| | 11.0.10.fx | librca | | 11.0.10.fx-librca
| | 11.0.10 | librca | | 11.0.10-librca
| | 8.0.292.fx | librca | | 8.0.292.fx-librca
| | 8.0.292 | librca | | 8.0.292-librca
| | 8.0.282.fx | librca | | 8.0.282.fx-librca
| | 8.0.282 | librca | | 8.0.282-librca
GraalVM | | 21.1.0.r16 | grl | | 21.1.0.r16-grl
| | 21.1.0.r11 | grl | | 21.1.0.r11-grl
| | 21.0.0.2.r11 | grl | | 21.0.0.2.r11-grl
| | 21.0.0.2.r8 | grl | | 21.0.0.2.r8-grl
| | 20.3.2.r11 | grl | | 20.3.2.r11-grl
| | 20.3.1.2.r11 | grl | | 20.3.1.2.r11-grl
| | 20.3.1.2.r8 | grl | | 20.3.1.2.r8-grl
| | 19.3.6.r11 | grl | | 19.3.6.r11-grl
| | 19.3.5.r11 | grl | | 19.3.5.r11-grl
| | 19.3.5.r8 | grl | | 19.3.5.r8-grl
Java.net | | 17.ea.23 | open | | 17.ea.23-open
| | 17.ea.22 | open | | 17.ea.22-open
| | 17.ea.21 | open | | 17.ea.21-open
| | 17.ea.20 | open | | 17.ea.20-open
| | 17.ea.19 | open | | 17.ea.19-open
| | 17.ea.7.lm | open | | 17.ea.7.lm-open
| | 17.ea.3.pma | open | | 17.ea.3.pma-open
| | 16 | open | | 16-open
| | 16.0.1 | open | | 16.0.1-open
| | 11.0.2 | open | | 11.0.2-open
Microsoft | | 11.0.11.9.1 | ms | | 11.0.11.9.1-ms
| | 11.0.10.9 | ms | | 11.0.10.9-ms
SAP | | 16 | sapmchn | | 16-sapmchn
| | 16.0.1 | sapmchn | | 16.0.1-sapmchn
| | 15.0.2 | sapmchn | | 15.0.2-sapmchn
| | 11.0.11 | sapmchn | | 11.0.11-sapmchn
| | 11.0.10 | sapmchn | | 11.0.10-sapmchn
TravaOpenJDK | | 11.0.9 | trava | | 11.0.9-trava
| | 8.0.232 | trava | | 8.0.232-trava
================================================================================
Use the Identifier for installation:
$ sdk install java 11.0.3.hs-adpt
================================================================================
위 내용과 같이 설치가능한 JDK 버젼들을 확인할 수 있다.
우리는 위에서 AdoptOpenJDK 11 버젼을 설치할 것이다.
JDK 설치하기.
설치형식
설치 형식은 아래와 같다.
sdk install <candidate> <version>
Java 11설치하기
sdk install java 11.0.11.j9-adpt
이미 설치되어 있다면 다음과 같은 메시지가 나온다.
java 11.0.11.j9-adpt is already installed.
Java 16 버젼 설치해보기.
이제 Java 16 버젼을 설치해보자.
sdk install java 16.0.1.hs-adpt
이미 설치되어 있는 버젼이 있다면 기본 설정을 물어보는 화면이 아래와 같이 나온다.
Downloading: java 16.0.1.hs-adpt
In progress...
############################################################################################################################### 100.0%############################################################################################################################### 100.0%
Repackaging Java 16.0.1.hs-adpt...
Done repackaging...
Cleaning up residual files...
Installing: java 16.0.1.hs-adpt
Done installing!
Do you want java 16.0.1.hs-adpt to be set as default? (Y/n): Y
Setting java 16.0.1.hs-adpt as default.
테스트하기.
java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
16.0.1 버젼이 설치되어 있는것을 확인할 수 있다.
버젼 교체하기.
11버젼도 존재하고, 16버젼도 존재한다, 이제 11버젼으로 교체해 보자.
sdk use java 11.0.11.j9-adpt
Using java version 11.0.11.j9-adpt in this shell.
테스트하기
java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
Eclipse OpenJ9 VM AdoptOpenJDK-11.0.11+9 (build openj9-0.26.0, JRE 11 Mac OS X amd64-64-Bit Compressed References 20210421_957 (JIT enabled, AOT enabled)
OpenJ9 - b4cc246d9
OMR - 162e6f729
JCL - 7796c80419 based on jdk-11.0.11+9)
11 버젼으로 default sdk 가 변경되었다.
삭제하기.
이제 java 16을 사용하지 않는다고 해보자.
설치된 버젼을 삭제하기 위해서 다음 명령을 수행하자.
sdk uninstall java 16.0.1.hs-adpt
Deselecting java 16.0.1.hs-adpt...
Uninstalling java 16.0.1.hs-adpt...
삭제여부 확인하기
이제 삭제가 정상으로 되었는지 확인해보자.
sdk list java
================================================================================
Available Java Versions
================================================================================
Vendor | Use | Version | Dist | Status | Identifier
--------------------------------------------------------------------------------
AdoptOpenJDK | | 16.0.1.j9 | adpt | | 16.0.1.j9-adpt
| | 16.0.1.hs | adpt | | 16.0.1.hs-adpt
| | 16.0.0.j9 | adpt | | 16.0.0.j9-adpt
| | 16.0.0.hs | adpt | | 16.0.0.hs-adpt
| >>> | 11.0.11.j9 | adpt | installed | 11.0.11.j9-adpt
| | 11.0.11.hs | adpt | | 11.0.11.hs-adpt
| | 11.0.10.j9 | adpt | | 11.0.10.j9-adpt
| | 11.0.10.hs | adpt | | 11.0.10.hs-adpt
| | 8.0.292.j9 | adpt | | 8.0.292.j9-adpt
| | 8.0.292.hs | adpt | | 8.0.292.hs-adpt
| | 8.0.282.j9 | adpt | | 8.0.282.j9-adpt
| | 8.0.282.hs | adpt | | 8.0.282.hs-adpt
Amazon | | 16.0.1.9.1 | amzn | | 16.0.1.9.1-amzn
... 생략
기타 상세한 사용법 알아보기.
사용법 에서 상세한 사용법을 확인할 수 있다.
Wrap Up
SDKman 은 개발시 자유로운 버젼 변경을 원활하게 수행할 수 있도록 해준다.
설치된 SDK의 경로를 찾아서 shell의 환경 변수를 바꾸어 주는 방식을 이용하지 않아도, 편리하게 원하는 버젼으로 교체할 수 있게 해주어, 개발자에게 매우 효과적인 툴이 될 것이다.