Aller au contenu

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

CommandDescription
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 envSwitch versions from .sdkmanrc
sdk env initCreate .sdkmanrc file
sdk home <candidate> <version>Show installation directory
sdk upgrade [candidate]Upgrade to latest stable
sdk flushClear 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

IssueSolution
sdk: command not foundSource init script: source "$HOME/.sdkman/bin/sdkman-init.sh"
Version not availableRun sdk list java to see current options; update SDKMAN
JAVA_HOME not setSDKMAN sets it automatically; check with echo $JAVA_HOME
Download failsCheck internet; try sdk flush to clear cache
Auto-env not workingSet sdkman_auto_env=true in config file
.sdkmanrc ignoredRun sdk env manually; ensure file format is correct
Slow startupSDKMAN adds ~200ms; use sdkman_auto_update=false
Disk spaceRun sdk flush archives to remove old downloads