# Install SDKMAN on Linux You are helping the user install SDKMAN for managing parallel versions of multiple Software Development Kits. ## Your tasks: 1. **Check if SDKMAN is already installed:** - Check: `sdk version` or `which sdk` - Check for SDKMAN directory: `ls -la ~/.sdkman` - If already installed, ask if they want to update it 2. **Check prerequisites:** SDKMAN requires: - curl: `curl --version` - zip/unzip: `which zip unzip` - bash or zsh shell Install missing prerequisites: ```bash sudo apt update sudo apt install curl zip unzip ``` 3. **Download and install SDKMAN:** ```bash curl -s "https://get.sdkman.io" | bash ``` The installer will: - Install to `~/.sdkman` - Add initialization to ~/.bashrc or ~/.zshrc - Set up sdk command 4. **Initialize SDKMAN in current shell:** ```bash source "$HOME/.sdkman/bin/sdkman-init.sh" ``` 5. **Verify installation:** ```bash sdk version sdk help ``` 6. **Show available SDKs:** ```bash sdk list ``` Common SDKs available: - Java (various distributions: OpenJDK, Graal, Corretto, etc.) - Gradle - Maven - Kotlin - Scala - Groovy - Spring Boot - Micronaut - And many more 7. **Install a few common SDKs (ask user first):** **Java:** ```bash sdk list java sdk install java # installs latest stable # Or specific version: # sdk install java 17.0.9-tem ``` **Gradle:** ```bash sdk install gradle ``` **Maven:** ```bash sdk install maven ``` 8. **Show basic SDKMAN usage:** Explain to the user: - `sdk list ` - List available versions of an SDK - `sdk install ` - Install specific version - `sdk install ` - Install latest stable - `sdk uninstall ` - Remove a version - `sdk use ` - Use version for current shell - `sdk default ` - Set default version - `sdk current ` - Show current version in use - `sdk current` - Show all current versions - `sdk upgrade ` - Upgrade to latest version - `sdk update` - Update SDK list - `sdk selfupdate` - Update SDKMAN itself 9. **Configure SDKMAN (optional):** Edit `~/.sdkman/etc/config`: ```bash # 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=true ``` 10. **Set up project-specific SDK versions:** Create `.sdkmanrc` file in project root: ```bash java=17.0.9-tem gradle=8.4 maven=3.9.5 ``` Enable auto-env: `sdk env` or `sdk env install` 11. **Verify PATH and environment:** ```bash which java java -version echo $JAVA_HOME ``` 12. **Show how to switch Java versions:** Demonstrate: ```bash 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-tem ``` 13. **Offline mode (optional):** Explain offline mode for when internet is unavailable: ```bash sdk offline enable sdk offline disable ``` 14. **Flush and clean:** ```bash sdk flush # Clear caches sdk flush temp # Clear temporary files ``` 15. **Provide best practices:** - Run `sdk update` regularly to refresh SDK lists - Run `sdk selfupdate` to keep SDKMAN current - Use `sdk current` to verify active versions - Use `.sdkmanrc` files for project-specific versions - Enable `sdkman_auto_env` for automatic version switching - Use `sdk env` when 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 16. **Troubleshooting:** - If `sdk` command not found, source the init script - Check `~/.bashrc` has SDKMAN initialization - Restart shell or source bashrc: `source ~/.bashrc` - Check PATH: `echo $PATH | grep sdkman` - Verify SDKMAN directory exists: `ls ~/.sdkman` ## 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 use` only affects current shell - Using `sdk default` affects all new shells - .sdkmanrc files are project-specific - SDKMAN is particularly popular in JVM ecosystem - Bash completion is included