Install SDKMAN on Linux
You are helping the user install SDKMAN for managing parallel versions of multiple Software Development Kits.
Your tasks:
Check if SDKMAN is already installed:
- Check:
sdk versionorwhich sdk - Check for SDKMAN directory:
ls -la ~/.sdkman - If already installed, ask if they want to update it
- Check:
Check prerequisites: SDKMAN requires:
- curl:
curl --version - zip/unzip:
which zip unzip - bash or zsh shell
Install missing prerequisites:
sudo apt update sudo apt install curl zip unzip- curl:
Download and install SDKMAN:
curl -s "https://get.sdkman.io" | bashThe installer will:
- Install to
~/.sdkman - Add initialization to ~/.bashrc or ~/.zshrc
- Set up sdk command
- Install to
Initialize SDKMAN in current shell:
source "$HOME/.sdkman/bin/sdkman-init.sh"Verify installation:
sdk version sdk helpShow available SDKs:
sdk listCommon SDKs available:
- Java (various distributions: OpenJDK, Graal, Corretto, etc.)
- Gradle
- Maven
- Kotlin
- Scala
- Groovy
- Spring Boot
- Micronaut
- And many more
Install a few common SDKs (ask user first):
Java:
sdk list java sdk install java # installs latest stable # Or specific version: # sdk install java 17.0.9-temGradle:
sdk install gradleMaven:
sdk install mavenShow basic SDKMAN usage: Explain to the user:
sdk list <sdk>- List available versions of an SDKsdk install <sdk> <version>- Install specific versionsdk install <sdk>- Install latest stablesdk uninstall <sdk> <version>- Remove a versionsdk use <sdk> <version>- Use version for current shellsdk default <sdk> <version>- Set default versionsdk current <sdk>- Show current version in usesdk current- Show all current versionssdk upgrade <sdk>- Upgrade to latest versionsdk update- Update SDK listsdk selfupdate- Update SDKMAN itself
Configure SDKMAN (optional): Edit
~/.sdkman/etc/config:# Auto answer 'yes' to all prompts sdkman_auto_answer=true # Automatically use Java version from .sdkmanrc sdkman_auto_env=true # Check for SDK updates on login sdkman_checkup_enable=true # Automatically selfupdate sdkman_selfupdate_enable=trueSet up project-specific SDK versions: Create
.sdkmanrcfile in project root:java=17.0.9-tem gradle=8.4 maven=3.9.5Enable auto-env:
sdk envorsdk env installVerify PATH and environment:
which java java -version echo $JAVA_HOMEShow how to switch Java versions: Demonstrate:
sdk list java sdk install java 11.0.21-tem sdk install java 17.0.9-tem sdk use java 11.0.21-tem java -version sdk default java 17.0.9-temOffline mode (optional): Explain offline mode for when internet is unavailable:
sdk offline enable sdk offline disableFlush and clean:
sdk flush # Clear caches sdk flush temp # Clear temporary filesProvide best practices:
- Run
sdk updateregularly to refresh SDK lists - Run
sdk selfupdateto keep SDKMAN current - Use
sdk currentto verify active versions - Use
.sdkmanrcfiles for project-specific versions - Enable
sdkman_auto_envfor automatic version switching - Use
sdk envwhen entering project directories - Keep multiple Java versions for different projects
- Set sensible defaults with
sdk default - SDKMAN doesn't require sudo
- Check
~/.sdkman/candidates/to see installed SDKs
- Run
Troubleshooting:
- If
sdkcommand not found, source the init script - Check
~/.bashrchas SDKMAN initialization - Restart shell or source bashrc:
source ~/.bashrc - Check PATH:
echo $PATH | grep sdkman - Verify SDKMAN directory exists:
ls ~/.sdkman
- If
Important notes:
- SDKMAN is user-level, doesn't require sudo
- Each SDK version is kept separate in
~/.sdkman/candidates/ - Can coexist with system Java or other installation methods
- Using
sdk useonly affects current shell - Using
sdk defaultaffects all new shells - .sdkmanrc files are project-specific
- SDKMAN is particularly popular in JVM ecosystem
- Bash completion is included