Top Related Projects
Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
Simple Python version management
Manage your app's Ruby environment
Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more
Manage your Java environment
Quick Overview
SDKMAN! (Software Development Kit Manager) is a command-line tool for managing multiple versions of various Software Development Kits on Unix-based systems. It provides a convenient way to install, switch between, and remove different versions of SDKs such as Java, Groovy, and Scala.
Pros
- Easy installation and management of multiple SDK versions
- Cross-platform support for Unix-based systems (Linux, macOS, Cygwin)
- Large number of supported SDKs and tools
- Active community and regular updates
Cons
- Limited support for Windows (only through Cygwin or WSL)
- Requires shell restart or rehashing after installation
- Some advanced features may require manual configuration
- Occasional network-related issues during downloads
Getting Started
To install SDKMAN!, run the following command in your terminal:
curl -s "https://get.sdkman.io" | bash
After installation, open a new terminal or run:
source "$HOME/.sdkman/bin/sdkman-init.sh"
To install the latest stable version of Java:
sdk install java
To list available versions of a specific SDK:
sdk list java
To switch to a different version:
sdk use java 11.0.12-open
For more information and advanced usage, visit the official SDKMAN! documentation at https://sdkman.io/usage.
Competitor Comparisons
Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
Pros of nvm
- Focused specifically on Node.js version management
- Simpler installation process (single shell script)
- Supports Windows through WSL or third-party alternatives
Cons of nvm
- Limited to Node.js ecosystem
- Requires manual PATH configuration in some cases
- Less extensive plugin system compared to SDKMAN!
Code Comparison
nvm:
nvm install 14.17.0
nvm use 14.17.0
nvm alias default 14.17.0
SDKMAN!:
sdk install java 11.0.11-open
sdk use java 11.0.11-open
sdk default java 11.0.11-open
Both tools offer similar command structures for installing, using, and setting default versions. However, nvm focuses on Node.js versions, while SDKMAN! supports multiple SDKs and programming languages.
SDKMAN! provides a more comprehensive solution for managing various development kits, including Java, Kotlin, Groovy, and more. It offers a plugin system and supports parallel version installations.
nvm, on the other hand, excels in its simplicity and focus on Node.js. It's widely adopted in the JavaScript community and integrates well with Node.js projects.
The choice between these tools depends on your specific needs. If you primarily work with Node.js, nvm might be more suitable. For a broader range of SDKs and languages, SDKMAN! offers greater flexibility and extensibility.
Simple Python version management
Pros of pyenv
- Supports multiple Python versions and virtual environments
- Lightweight and focused solely on Python version management
- Allows per-project Python version configuration
Cons of pyenv
- Limited to Python ecosystem management
- Requires manual compilation of Python versions on some systems
- Less extensive plugin ecosystem compared to SDKMAN!
Code Comparison
pyenv:
pyenv install 3.9.0
pyenv global 3.9.0
pyenv virtualenv 3.9.0 myproject
pyenv local myproject
SDKMAN!:
sdk install java 11.0.9-amzn
sdk use java 11.0.9-amzn
sdk install gradle 6.7
sdk use gradle 6.7
Both tools provide version management capabilities, but pyenv focuses exclusively on Python, while SDKMAN! supports multiple SDKs and programming languages. pyenv offers more granular control over Python versions and environments, whereas SDKMAN! provides a broader range of tools and languages with a simpler installation process. The choice between the two depends on whether you need specialized Python management or a more versatile tool for multiple languages and SDKs.
Manage your app's Ruby environment
Pros of rbenv
- Lightweight and focused solely on Ruby version management
- Seamless integration with shell environments
- Non-intrusive design that doesn't modify Ruby binaries
Cons of rbenv
- Limited to Ruby ecosystem management
- Requires manual installation of Ruby versions
- Less extensive plugin ecosystem compared to SDKMAN!
Code Comparison
rbenv:
rbenv install 3.0.0
rbenv global 3.0.0
rbenv rehash
SDKMAN!:
sdk install ruby 3.0.0
sdk use ruby 3.0.0
Key Differences
- Scope: rbenv focuses exclusively on Ruby, while SDKMAN! supports multiple SDKs and programming languages.
- Installation: rbenv requires manual Ruby version installation, whereas SDKMAN! automates the process.
- Usage: rbenv uses a more verbose syntax, while SDKMAN! offers a simpler command structure.
- Ecosystem: SDKMAN! provides a broader range of tools and languages, making it more versatile for polyglot developers.
- Integration: rbenv integrates more deeply with the shell environment, offering smoother switching between Ruby versions.
Both tools effectively manage language versions, but rbenv is tailored for Ruby developers, while SDKMAN! caters to a wider audience with its multi-language support.
Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more
Pros of asdf
- Supports a wider range of programming languages and tools
- Allows managing multiple versions of the same tool simultaneously
- More extensible with a plugin system for adding new tools
Cons of asdf
- Requires manual installation of plugins for each tool
- Less focused on Java ecosystem compared to SDKMAN!
- Steeper learning curve for users new to version managers
Code Comparison
SDKMAN! installation:
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java
asdf installation:
git clone https://github.com/asdf-vm/asdf.git ~/.asdf
echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc
asdf plugin add java
asdf install java openjdk-11.0.2
Both SDKMAN! and asdf are version management tools for developers, but they have different focuses and approaches. SDKMAN! is primarily designed for managing Java-related SDKs and tools, while asdf is a more general-purpose version manager that can handle a broader range of programming languages and tools.
SDKMAN! offers a simpler installation process and is more user-friendly for those primarily working with Java-based technologies. On the other hand, asdf provides greater flexibility and extensibility, making it suitable for developers working with multiple languages and tools in their projects.
The choice between SDKMAN! and asdf depends on the specific needs of the developer and the range of technologies they work with regularly.
Manage your Java environment
Pros of jenv
- Focused specifically on Java version management
- Lightweight and easy to install
- Supports shell integration for automatic Java version switching
Cons of jenv
- Limited to Java version management only
- Requires manual installation of Java versions
- Less active development and community support
Code Comparison
jenv:
jenv add /path/to/java/home
jenv global 11.0
jenv local 8.0
SDKMAN:
sdk install java 11.0.12-open
sdk use java 11.0.12-open
sdk default java 11.0.12-open
Summary
jenv is a lightweight tool focused solely on Java version management, offering easy installation and shell integration. However, it requires manual Java installation and has a narrower scope compared to SDKMAN.
SDKMAN, on the other hand, is a more comprehensive tool for managing multiple SDKs, including Java. It offers automatic downloads and installations, supports a wide range of tools, and has a more active community. However, it may be considered more complex for users who only need Java version management.
The choice between jenv and SDKMAN depends on whether you need a Java-specific tool or a more versatile SDK manager. Both tools effectively manage Java versions, but SDKMAN provides broader functionality for managing multiple development tools.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
SDKMAN! CLI
The Software Development Kit Manager Command Line Interface
SDKMAN is a tool for managing parallel Versions of multiple Software Development Kits on any Unix-based system. It provides a convenient command-line interface for installing, switching, removing, and listing Candidates.
See documentation on the SDKMAN! website.
NOTICE
We are rewriting all the commands for SDKMAN! in Rust under a new project that supplements this one. Only bug fixes to supporting code will be accepted in this project. As a result, no further enhancements will be accepted on the commands in this project, and the commands here will be phased out in due course. This project will eventually form a lightweight wrapper/launcher for the replacement Rust commands.
Installation
Open your favourite terminal and enter the following:
$ curl -s https://get.sdkman.io | bash
If the environment needs tweaking for SDKMAN to be installed, the installer will prompt you accordingly and ask you to restart.
Running the Cucumber Features
All SDKMAN's BDD tests describing the CLI behaviour are written in Cucumber and can be found under src/test/resources/features
. These can be run with Gradle by running the following command:
$ ./gradlew test
To perform development, you will need to have a JDK 11 installed which can be obtained by running the following after installing SDKMAN:
$ sdk env install
Contributors
This project exists thanks to all the people who contribute.
Backers
Thank you to all our backers! [Become a backer]
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]
Top Related Projects
Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
Simple Python version management
Manage your app's Ruby environment
Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more
Manage your Java environment
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot