SDKMAN!
GitHub Overview
sdkman/sdkman-cli
The SDKMAN! Command Line Interface
Repository:https://github.com/sdkman/sdkman-cli
Homepage:https://sdkman.io
Stars6,428
Watchers118
Forks635
Created:August 27, 2012
Language:Gherkin
License:Apache License 2.0
Topics
None
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.