Search code examples
javalinuxdebian

Setting JAVA_HOME does nothing in Linux


I have both java17 and java11 on my Debian12 PC and I would like to use java11 by default.

However, after setting JAVA_HOME, PATH and JRE_HOME successfully, My PC tells me I am still using java17 by default.


$ java -version

openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Debian-1deb12u1, mixed mode, sharing)

The setting I added in .bashrc:

# >>> java >>>
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
# <<< java <<<

Here is my terminal output

$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64/


$ echo $JRE_HOME
/usr/lib/jvm/java-11-openjdk-amd64//jre

echo $PATH
/home/MYUSER/.vscode-server/bin/dc96b837cf6bb4af9cd736aa3af08cf8279f7685/bin/remote-cli:/home/MYUSER/miniconda3/bin:/home/MYUSER/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Users/someone/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/someone/AppData/Local/Programs/Microsoft VS Code/bin:/opt/riscv/bin:/opt/riscv/bin:/home/MYUSER/apache-maven-3.9.7/bin:/usr/lib/jvm/java-11-openjdk-amd64/bin

Solution

  • Default

    find all JDK in your machine.

    update-alternatives --config java
    

    config

    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1081
    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101
    
    sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1081
    sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1101
    

    switch JDK

    sudo update-alternatives --config java
    

    OR INSTALL SDKMAN

    Remove all JDK.

    Install SDKMAN.

    list all java

    sdk list java
    

    install JDK

    sdk install java 11.0.23-tem
    sdk install java 17.0.11-tem
    sdk install java 22.0.1-oracle
    

    switch JDK version

    switch to Temurin JDK 17.0.11

    sdk default java 17.0.11-tem
    

    switch to Oracle JDK 22.0.1

    sdk default java 22.0.1-oracle
    

    Also can use sdkman install maven and kotlin and gradle.

    You don't need to manual change JAVA_HOME, PATH in your profile. (.bashrc or other).