I’m not a java developer but recently I had the need to manage multiple Java JDKs on a single system. Because I had to keep running an older java version for compatibility. Upgrading my local Java JDK wasn’t the ideal solution. For my case and that’s where SDKMan came in – a JAVA JDK Manager that will make you life easier.
Turns out SDKMan is very similar to NVM (node.js version manager) that I use regularly.
SDKMan can run on any UNIX-based platforms such as Mac OSX, Linux, Cygwin, Solaris, and FreeBSD, and we can install it using the following commands:
$ curl -s "https://get.sdkman.io" | bash $ source "$HOME/.sdkman/bin/sdkman-init.sh"
If the install went the way it should, by entering the command “$ sdk” you should see something like this:
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>
default or d <candidate> [version]
home or h <candidate> <version>
env or e [init]
current or c [candidate]
upgrade or ug [candidate]
version or v
broadcast or b
help
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
local-path : optional path to an existing local installation
eg: $ sdk install groovy 2.4.13-local /opt/groovy-2.4.13
To help you getting started managing multiple Java JDKS, here’s a list of essential commands such as switching JDK version, install new JDK versions, and linking already installed JDKS version with SDKMan.
List available java JDK
$ sdk list java
Install a particular JDK
$ sdk install java 10.0.2-open
Note: 10.0.2-open matches the Identifier from results comming from sdk list java
The command might take a few minutes. Be patient.
Activating a particular JDK
$ sdk use java 10.0.2-open
Replace 10.0.2-open by any of the identifiers you have installed
Linking pre-existing JDKS
If you like me have already installed jdks you can link it to sdk
sdk installs binaires at ~/.sdk
java by default installs jdks at /Library/Java/JavaVirtualMachines
to make sure that sdkman is aware of those previously installed vms we have to do the following for each vm:
$ ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/ ~/.sdkman/candidates/java/jdk1.8.0_92.jdk
$ ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/ ~/.sdkman/candidates/java/jdk1.7.0_79.jdk
Note: jdk1.8.0_92.jdk is one of my pre-existing VM's
Once the linking is completed, if you re-run "sdk list java" you will see a section named "Unclassified"
In my case:
Unclassified | | jdk1.8.0_92.jdk | none | local only | jdk1.8.0_92.jdk
$ sdk use java {identifer}
Every time you switch java, $JAVA_HOME is automatically updated.
Hope you find this post useful. Make sure to check all other posts here.
See you soon.
Márcio