SDKMAN Cheat Sheet
Overview
SDKMAN (Software Development Kit Manager) is a tool for managing parallel versions of multiple Software Development Kits on Unix-based systems and Windows (via WSL or Git Bash). It focuses on JVM ecosystems, managing Java, Kotlin, Scala, Groovy, Gradle, Maven, Spring Boot CLI, and many other JVM-related tools through a simple command-line interface.
SDKMAN supports installing multiple versions of JDKs from different vendors (Temurin, GraalVM, Corretto, Zulu, Oracle, etc.), automatic version switching per directory via .sdkmanrc files, and offline mode for previously downloaded SDKs. It is the de facto standard for managing Java development environments.
Installation
# Install SDKMAN
curl -s "https://get.sdkman.io" | bash
# Source in current shell
source "$HOME/.sdkman/bin/sdkman-init.sh"
# Verify installation
sdk version
# Update SDKMAN itself
sdk selfupdate
# Force reinstall
sdk selfupdate force
Core Commands
| Command | Description |
|---|---|
sdk install <candidate> [version] | Install an SDK |
sdk uninstall <candidate> <version> | Uninstall a version |
sdk use <candidate> <version> | Switch version for current shell |
sdk default <candidate> <version> | Set default version |
sdk current [candidate] | Show current version(s) |
sdk list [candidate] | List available versions |
sdk env | Switch versions from .sdkmanrc |
sdk env init | Create .sdkmanrc file |
sdk home <candidate> <version> | Show installation directory |
sdk upgrade [candidate] | Upgrade to latest stable |
sdk flush | Clear caches |
Installing Java
# List available Java distributions
sdk list java
# Install latest Temurin LTS
sdk install java 21.0.3-tem
# Install specific distributions
sdk install java 21.0.3-amzn # Amazon Corretto
sdk install java 21.0.3-graalce # GraalVM CE
sdk install java 21.0.3-zulu # Azul Zulu
sdk install java 21.0.3-oracle # Oracle
sdk install java 21.0.3-librca # BellSoft Liberica
sdk install java 21.0.3-ms # Microsoft
# Install and set as default
sdk install java 21.0.3-tem
sdk default java 21.0.3-tem
# Install from a local path
sdk install java 21-custom /path/to/jdk-21
Switching Versions
# Set for current shell only
sdk use java 17.0.11-tem
# Set as global default
sdk default java 21.0.3-tem
# Check current versions
sdk current
sdk current java
# Use specific version for one command
JAVA_HOME=$(sdk home java 17.0.11-tem) mvn clean install
.sdkmanrc File
# Create .sdkmanrc in project root
sdk env init
# .sdkmanrc contents
java=21.0.3-tem
gradle=8.7
kotlin=2.0.0
# Switch to versions defined in .sdkmanrc
sdk env
# Install missing versions from .sdkmanrc
sdk env install
# Auto-env feature (add to ~/.sdkman/etc/config)
# sdkman_auto_env=true
Other JVM Tools
# Build tools
sdk install gradle 8.7
sdk install maven 3.9.6
sdk install ant 1.10.14
sdk install sbt 1.9.9
# Languages
sdk install kotlin 2.0.0
sdk install scala 3.4.1
sdk install groovy 4.0.21
# Frameworks and tools
sdk install springboot 3.2.5
sdk install micronaut 4.4.2
sdk install quarkus 3.10.0
# List all available candidates
sdk list
Listing Available Versions
# List all Java distributions
sdk list java
# Sample output:
# ================================================================================
# Vendor | Use | Version | Dist | Status | Identifier
# ================================================================================
# Corretto | | 21.0.3 | amzn | | 21.0.3-amzn
# Dragonwell | | 21.0.3 | albba | | 21.0.3-albba
# GraalVM CE | | 21.0.2 | graalce | | 21.0.2-graalce
# Temurin | >>> | 21.0.3 | tem | installed | 21.0.3-tem
# List available Gradle versions
sdk list gradle
# List available Maven versions
sdk list maven
Version Management
# Check what's installed
sdk current
# java: 21.0.3-tem
# gradle: 8.7
# kotlin: 2.0.0
# Upgrade to latest stable
sdk upgrade java
sdk upgrade gradle
# Check for available upgrades
sdk upgrade
# Uninstall a version
sdk uninstall java 17.0.11-tem
# Show installation path
sdk home java 21.0.3-tem
# /home/user/.sdkman/candidates/java/21.0.3-tem
Advanced Usage
Offline Mode
# Enable offline mode
sdk offline enable
# Disable offline mode
sdk offline disable
# Previously downloaded versions work offline
sdk use java 21.0.3-tem # Works in offline mode
Broadcast Messages
# Check for announcements
sdk broadcast
Clear Caches
# Clear download archives
sdk flush archives
# Clear temporary files
sdk flush tmp
# Clear broadcast cache
sdk flush broadcast
Install from Local Path
# Install a local JDK
sdk install java 21-custom /opt/jdk-21
# Useful for:
# - Custom JDK builds
# - Corporate internal JDK distributions
# - JDKs downloaded manually
CI/CD Integration
# GitHub Actions
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: sdkman/sdkman-action@master
with:
candidate: java
version: 21.0.3-tem
- run: java --version
- run: ./gradlew build
# CI script with SDKMAN
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk env install # Install versions from .sdkmanrc
./gradlew build
Configuration
# ~/.sdkman/etc/config
sdkman_auto_answer=false # Auto-accept prompts
sdkman_auto_complete=true # Enable tab completion
sdkman_auto_env=true # Auto-switch from .sdkmanrc
sdkman_auto_update=true # Auto-update SDKMAN
sdkman_beta_channel=false # Use beta versions
sdkman_colour_enable=true # Colored output
sdkman_curl_connect_timeout=7 # Connection timeout
sdkman_curl_max_time=10 # Max download time
sdkman_debug_mode=false # Debug logging
sdkman_insecure_ssl=false # Skip SSL verification
sdkman_rosetta2_compatible=false # Use x86 on Apple Silicon
sdkman_selfupdate_feature=true # Enable self-update
# SDKMAN directory structure
~/.sdkman/
├── archives/ # Downloaded archives
├── bin/ # SDKMAN scripts
├── candidates/ # Installed SDKs
│ ├── java/
│ │ ├── 21.0.3-tem/
│ │ ├── 17.0.11-tem/
│ │ └── current -> 21.0.3-tem
│ ├── gradle/
│ └── maven/
├── etc/
│ └── config # Configuration
└── tmp/ # Temporary files
Troubleshooting
| Issue | Solution |
|---|---|
sdk: command not found | Source init script: source "$HOME/.sdkman/bin/sdkman-init.sh" |
| Version not available | Run sdk list java to see current options; update SDKMAN |
| JAVA_HOME not set | SDKMAN sets it automatically; check with echo $JAVA_HOME |
| Download fails | Check internet; try sdk flush to clear cache |
| Auto-env not working | Set sdkman_auto_env=true in config file |
.sdkmanrc ignored | Run sdk env manually; ensure file format is correct |
| Slow startup | SDKMAN adds ~200ms; use sdkman_auto_update=false |
| Disk space | Run sdk flush archives to remove old downloads |