jvr 0.2.0

A simple and easy-to-use Java version manager (registry: jvr), similar to Node.js's nvm, but it does not follow nvm's naming convention. Otherwise, it would be named 'jvm', which could cause command conflicts or ambiguity.
Documentation

jvr

A simple and easy-to-use Java version manager(registry: jvr), similar to Node.js's nvm, but it does not follow nvm's naming convention. Otherwise, it would be named jvm, which could cause command conflicts or ambiguity.

0.Platform Support

jvr supports the following operating systems:

  • Windows (Windows 10/11)
  • Linux (various distributions)
  • macOS (various versions)

1.Install

1.1.Download executable

Download the executable file directly from GitHub and put it in any $PATH path.

1.2.Cargo

cargo install --git https://github.com/photowey/jvr.git [--branch main]

1.3.Build from source

git clone https://github.com/photowey/jvr.git
cd jvr
cargo build --release

2.Usage

2.1.Commands

2.1.1Add

Register JDK

$ jvr add -h | --help
$ jvr add <NAME> <PATH>

# e.g.:
$ jvr add jdk8 ${YOUR_PATH}/jdk8
$ jvr add jdk11 ${YOUR_PATH}/jdk11
$ ...

2.1.2List

List all registered JDKs, and use a clear table to list the registrations. The * indicates the version currently in use.

$ jvr list

2.1.3Use

Switch the JDK version and automatically update the user's JAVA_HOME environment variable.

$ jvr use <NAME>

# e.g.:
$ jvr use jdk11

Note for Unix users (Linux/macOS):

After using jvr use, the JAVA_HOME environment variable is written to your shell configuration file (e.g., ~/.bashrc, ~/.zshrc, ~/.profile). To apply the changes, you need to:

  1. Reload your shell configuration:

    # For bash
    source ~/.bashrc
    # or
    source ~/.bash_profile
    
    # For zsh
    source ~/.zshrc
    
    # For profile
    source ~/.profile
    
  2. Or simply open a new terminal window/tab

The changes will take effect immediately in Windows.

2.1.4Version

View the version of jvr itself.

2.1.5Open

Open the directory where jvr HOME is located, if applicable.

3.Configuration

3.1.Configuration File Location

jvr stores its configuration in:

  • Windows: %USERPROFILE%\.jvr\config.json
  • Linux/macOS: ~/.jvr/config.json

3.2.Environment Variables

jvr automatically manages the following environment variables:

  • JAVA_HOME: Set to the currently active JDK path
  • PATH: Automatically includes $JAVA_HOME/bin (Unix) or %JAVA_HOME%\bin (Windows)

3.3.Shell Configuration Files (Unix)

On Unix systems (Linux/macOS), jvr automatically detects your shell and writes environment variables to the appropriate configuration file:

  • Zsh: ~/.zshrc, ~/.zshenv
  • Bash: ~/.bashrc, ~/.bash_profile, ~/.profile
  • Default: ~/.profile

The tool will use the first available file in the list above.

4.Examples

4.1.Basic Usage

# Add JDK versions
$ jvr add jdk8 /usr/lib/jvm/java-8-openjdk
$ jvr add jdk11 /usr/lib/jvm/java-11-openjdk
$ jvr add jdk17 /usr/lib/jvm/java-17-openjdk

# List all registered JDKs
$ jvr list

# Switch to a specific JDK version
$ jvr use jdk17

# Verify the change (Unix)
$ echo $JAVA_HOME
$ java -version

# Verify the change (Windows)
$ echo %JAVA_HOME%
$ java -version

4.2.Platform-Specific Examples

Windows:

$ jvr add jdk21 "C:\Program Files\Java\jdk-21"
$ jvr use jdk21

Linux/macOS:

$ jvr add jdk21 /usr/lib/jvm/java-21-openjdk
$ jvr use jdk21
$ source ~/.bashrc  # or ~/.zshrc

5.Troubleshooting

5.1.Environment Variable Not Updated (Unix)

If JAVA_HOME is not updated after using jvr use:

  1. Check if the environment variable was written to your shell config file:

    $ cat ~/.bashrc | grep JAVA_HOME
    # or
    $ cat ~/.zshrc | grep JAVA_HOME
    
  2. Reload your shell configuration:

    $ source ~/.bashrc  # or ~/.zshrc
    
  3. Verify in a new terminal window.

5.2.Permission Denied (Unix)

If you encounter permission errors when setting system environment variables, you may need to use sudo:

$ sudo jvr use <NAME>

However, it's recommended to use user-level environment variables instead.

6.License

Licensed under the Apache License, Version 2.0. See LICENSE for details.