SDKMAN!

version-managementJavaJVMKotlinScalaGroovyMavenGradleCLI

GitHub Overview

sdkman/sdkman-cli

The SDKMAN! Command Line Interface

Stars6,428
Watchers118
Forks635
Created:August 27, 2012
Language:Gherkin
License:Apache License 2.0

Topics

None

Star History

sdkman/sdkman-cli Star History
Data as of: 7/20/2025, 02:59 AM

Language Version Management Tool

SDKMAN!

Overview

SDKMAN! is a powerful command-line tool for managing JVM-related Software Development Kits (SDKs) on Unix-based systems. It enables easy management of over 100 JVM-based tools and frameworks including Java, Scala, Kotlin, Groovy, Maven, Gradle, SBT, and Spring Boot. It allows developers to seamlessly switch between different JDK versions per project, ensuring consistent environments across development teams.

Details

Key Features

  • Extensive SDK Support: Java, Kotlin, Scala, Groovy, Maven, Gradle, SBT, Spring Boot, Vert.x, Micronaut, Quarkus, and more
  • Multiple JDK Distributions: Eclipse Temurin, Oracle, Amazon Corretto, GraalVM, Azul Zulu, Liberica, Microsoft, and others
  • Automatic Environment Configuration: Auto-switching via project-specific .sdkmanrc files
  • Offline Support: Works without internet connection using cache functionality
  • Parallel Version Management: Install multiple versions simultaneously with easy switching
  • CI/CD Integration: Compatible with GitHub Actions, Jenkins, and other CI/CD pipelines

Supported JDK Distributions

  • Eclipse Temurin (default, formerly AdoptOpenJDK)
  • Oracle JDK
  • Amazon Corretto
  • Microsoft Build of OpenJDK
  • Azul Zulu
  • BellSoft Liberica
  • SAP SapMachine
  • GraalVM CE/EE
  • IBM Semeru
  • Alibaba Dragonwell

How It Works

SDKMAN! installs SDKs in the ~/.sdkman directory and manages versions using symbolic links and shell functions. It dynamically updates the PATH and JAVA_HOME environment variables to enable seamless version switching.

Advantages and Disadvantages

Advantages

  • Comprehensive Tool Support: Manages almost all JVM-related tools
  • Rich JDK Options: Supports all major JDK distributions
  • Project-level Management: Automatic environment setup with .sdkmanrc files
  • Fast Installation: Parallel downloads and caching features
  • Active Community: Frequent updates and new tool additions
  • Vendor Neutral: Not tied to any specific JDK vendor

Disadvantages

  • Unix-only: Requires WSL2 or Cygwin on Windows
  • Initial Setup: Requires shell configuration file modifications
  • Disk Usage: Multiple versions consume significant storage
  • Learning Curve: Need to familiarize with command structure
  • Network Dependency: Internet connection required for initial installation

Reference Pages

Usage Examples

Installation

# Install SDKMAN!
curl -s "https://get.sdkman.io" | bash

# After installation, open a new terminal or run:
source "$HOME/.sdkman/bin/sdkman-init.sh"

# Verify installation
sdk version

# Upgrade to latest version
sdk selfupdate

# Force reinstall
sdk selfupdate force

Basic Usage

# List available Java versions
sdk list java

# Install latest LTS Java (Eclipse Temurin)
sdk install java

# Install specific versions
sdk install java 21.0.4-tem
sdk install java 17.0.12-tem
sdk install java 11.0.24-tem

# Install other distributions
sdk install java 21.0.4-amzn  # Amazon Corretto
sdk install java 21.0.4-oracle # Oracle JDK
sdk install java 21.0.4-graal  # GraalVM
sdk install java 21.0.4-zulu   # Azul Zulu

# Check current version
sdk current java
sdk current     # Show current versions of all SDKs

Version Switching

# Temporary switch (current shell session only)
sdk use java 21.0.4-tem
sdk use java 17.0.12-amzn

# Set default version (persistent)
sdk default java 21.0.4-tem

# Check installed versions
sdk list java | grep installed

# Use locally installed JDK
sdk install java 17-custom /path/to/jdk17
sdk use java 17-custom

Build Tool Management

# Install Maven
sdk install maven
sdk install maven 3.9.6
sdk install maven 3.8.8

# Install Gradle
sdk install gradle
sdk install gradle 8.5
sdk install gradle 7.6.4

# Install SBT (Scala Build Tool)
sdk install sbt
sdk install sbt 1.9.7

# Install Ant
sdk install ant 1.10.14

Programming Language Management

# Install Kotlin
sdk install kotlin
sdk install kotlin 1.9.22

# Install Scala
sdk install scala
sdk install scala 3.3.1
sdk install scala 2.13.12

# Install Groovy
sdk install groovy
sdk install groovy 4.0.18

Framework Management

# Install Spring Boot
sdk install springboot
sdk install springboot 3.2.2

# Install Micronaut
sdk install micronaut
sdk install micronaut 4.2.3

# Install Quarkus
sdk install quarkus
sdk install quarkus 3.6.6

# Install Vert.x
sdk install vertx
sdk install vertx 4.5.1

Automatic Project Environment Management

# Navigate to project directory
cd /path/to/my-project

# Create .sdkmanrc file
echo "java=21.0.4-tem" > .sdkmanrc
echo "maven=3.9.6" >> .sdkmanrc
echo "kotlin=1.9.22" >> .sdkmanrc

# Apply environment automatically (auto-executes on directory change)
sdk env

# Save current environment to .sdkmanrc
sdk env init

# Install SDKs based on .sdkmanrc
sdk env install

Cache and Offline Management

# Update candidate list
sdk update

# Clear cache
sdk flush

# Clear specific caches
sdk flush candidates
sdk flush broadcast
sdk flush version

# Toggle offline mode
sdk offline enable
sdk offline disable

CI/CD Environment Usage

# GitHub Actions example
- name: Setup SDKMAN
  run: |
    curl -s "https://get.sdkman.io" | bash
    source "$HOME/.sdkman/bin/sdkman-init.sh"
    
- name: Install Java and Maven
  run: |
    source "$HOME/.sdkman/bin/sdkman-init.sh"
    sdk install java 21.0.4-tem
    sdk install maven 3.9.6
    
# Jenkinsfile example
pipeline {
    agent any
    stages {
        stage('Setup') {
            steps {
                sh '''
                    curl -s "https://get.sdkman.io" | bash
                    source "$HOME/.sdkman/bin/sdkman-init.sh"
                    sdk install java 21.0.4-tem
                '''
            }
        }
    }
}

Uninstall and Cleanup

# Uninstall specific versions
sdk uninstall java 17.0.12-tem
sdk uninstall maven 3.8.8

# Remove unused old versions
sdk flush temp

# Uninstall SDKMAN! itself
rm -rf ~/.sdkman
# Remove related lines from ~/.bashrc, ~/.zshrc, etc.