If you are a Java developer, it is normal to have multiple Java versions installed on your machine to support different build environments. When a Java program is compiled, the build environment sets the oldest JRE version the program can support. Now, if you run this program on a Linux machine where an unsupported Java version is installed, you will encounter an exception.
For example, if your program is compiled on Java 11, it can’t be run on a machine where Java 8 is installed. But the good thing is you can install multiple Java versions on your machine and quickly change the default JRE version.
In this tutorial, I’ll explain how to change the default Java version on a Linux machine. First of all, run the following command to check the current Java version:
$ java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.10.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
As you can see above, the default Java version is currently set to OpenJDK JRE 1.8. Now, let’s run the following command to see all available Java versions:
$ sudo update-alternatives --config java
Running the above command displays a list of installed Java JDKs and JREs allowing you to select the one as you want to set as default.
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number:
When prompted, select the Java version you would like to use. If the list does not include your desired Java version, you can always install it.
Now you can verify the default Java version as fellows:
$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.10.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.10.3, mixed mode, sharing)
That’s it. The default Java version is changed to OpenJDK 11.
Bonus: Use Script to Switch Java Version
If you frequently switch between different Java versions, it is a good idea to write a short script to automate the process. Here is the script I used for switching to OpenJDK 8 on my machine.
java8.sh
sudo update-java-alternatives -s java-1.8.0-openjdk-amd64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME
Similarly, you can create scripts for other Java versions installed on your machine. The next step is to add these scripts as aliases to .bashrc
file.
...
# Java Alias
alias java8='source /opt/java/switch/java8.sh'
alias java11='source /opt/java/switch/java11.sh'
Next, run the following command to load the changes of .bashrc
file:
$ source ~/.bashrc
Now if you want to switch to Java 8, just type the following command in your terminal:
$ java8
Read Next: How to install Java on Ubuntu 18.04
✌️ Like this article? Follow me on
Twitter
and LinkedIn.
You can also subscribe to
RSS Feed.
В этом руководстве я покажу вам, как установить версию Java по умолчанию в Ubuntu / Debian.
Обычно в вашей системе Ubuntu или Debian запускается более одной версии Java – по причинам, связанным с разработкой или изменением требований приложений.
Предположим, что вы установили Java 11, и ранее у вас была установлена другая версия Java, вы можете выбрать версию Java по умолчанию для использования с помощью команды update-alternatives –config java.
Проверка версий Java, установленных в Ubuntu / Debian
Чтобы получить список установленных версий Java, выполните команду:
$ update-java-alternatives --list java-1.11.0-openjdk-amd64 1101 /usr/lib/jvm/java-1.11.0-openjdk-amd64 java-8-oracle 1081 /usr/lib/jvm/java-8-oracle
Получив список версий Java, установите версию по умолчанию, выполнив команду:
$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode
* 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number: 2
Проверьте версию Java
$ java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
То же самое можно сделать для javac.
~$ sudo update-alternatives --config javac
There is 1 choice for the alternative javac (providing /usr/bin/javac).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/bin/javac 1081 auto mode
* 1 /usr/lib/jvm/java-8-oracle/bin/javac 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number:
Если JAVA_HOME настроен неправильно, выполните команду ниже, чтобы установить текущую настройку Java по умолчанию.
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
Для JRE используйте:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
Постоянство может быть достигнуто путем размещения команды экспорта в вашем .bashrc или /etc/profile
Все началось с того, что команда java -version сообщила мне, что у меня в дистрибутиве стоит 6-ая версия, а для установки нового сервера требовалась 7-я. Я года два, как не подходил к java, потому решил не умничать, а найти мануал в инете… Мануалы нашел (ссылки здесь), но оказалось, что у меня уже стоит седьмая версия, чтобы переключиться на нее, нужно было использовать update-alternatives —config java
Сначала все выглядело вот так¶
In [ ]:
root@kali:/home/kiss# java -version java version "1.6.0_35" OpenJDK Runtime Environment (IcedTea6 1.13.7) (6b35-1.13.7-1~deb7u1) OpenJDK Server VM (build 23.25-b01, mixed mode)
Я подумал, что раз отно так, то это жжжж неспроста. В Kali полно java программ, так что мне нельзя сносить старую java. Лучше бы найти мануал, в котором все эти мелководные камни описаны. Потратил довольно много времени на всякие вредные описания oracle java и дебиановские штучки.
Голова стала пухнуть, наверное поэтому от отчаяния набрал поиск на русском. И, о счастье, нашел исчерпывающий мануал (ссылка выше — Установка Java на Debian/Ubuntu/Mint).
In [ ]:
! update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java 1061 auto mode 1 /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java 1061 manual mode * 2 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 1051 manual mode Press enter to keep the current choice[*], or type selection number:
Запускаешь и переключаешься, потом снова запускаешь и уже видишь, что активна 7-ая версия, но при запуске компьютера будет активизироваться 6-ая, поскольку у нее auto mode. Мне это и надо.
java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1~deb7u1) OpenJDK Server VM (build 24.79-b02, mixed mode)
Ниже распечатаем справочники, дабы посмотреть при случае, что еще можно напереключать…
In [ ]:
root@kali:/home/kiss# update-alternatives --list java /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java
Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -d32 use a 32-bit data model if available -d64 use a 64-bit data model if available -client to select the "client" VM -server to select the "server" VM -zero to select the "zero" VM -jamvm to select the "jamvm" VM -avian to select the "avian" VM -dcevm to select the "dcevm" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is server, because you are running on a server-class machine. -cp <class search path of directories and zip/jar files> -classpath <class search path of directories and zip/jar files> A : separated list of directories, JAR archives, and ZIP archives to search for class files. -D<name>=<value> set a system property -verbose:[class|gc|jni] enable verbose output -version print product version and exit -version:<value> require the specified version to run -showversion print product version and continue -jre-restrict-search | -no-jre-restrict-search include/exclude user private JREs in the version search -? -help print this help message -X print help on non-standard options -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions with specified granularity -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] disable assertions with specified granularity -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -agentlib:<libname>[=<options>] load native agent library <libname>, e.g. -agentlib:hprof see also, -agentlib:jdwp=help and -agentlib:hprof=help -agentpath:<pathname>[=<options>] load native agent library by full pathname -javaagent:<jarpath>[=<options>] load Java programming language agent, see java.lang.instrument -splash:<imagepath> show splash screen with specified image See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
In [ ]:
root@kali:/home/kiss# update-alternatives --help Usage: update-alternatives [<option> ...] <command> Commands: --install <link> <name> <path> <priority> [--slave <link> <name> <path>] ... add a group of alternatives to the system. --remove <name> <path> remove <path> from the <name> group alternative. --remove-all <name> remove <name> group from the alternatives system. --auto <name> switch the master link <name> to automatic mode. --display <name> display information about the <name> group. --query <name> machine parseable version of --display <name>. --list <name> display all targets of the <name> group. --get-selections list master alternative names and their status. --set-selections read alternative status from standard input. --config <name> show alternatives for the <name> group and ask the user to select which one to use. --set <name> <path> set <path> as alternative for <name>. --all call --config on all alternatives. <link> is the symlink pointing to /etc/alternatives/<name>. (e.g. /usr/bin/pager) <name> is the master name for this link group. (e.g. pager) <path> is the location of one of the alternative target files. (e.g. /usr/bin/less) <priority> is an integer; options with higher numbers have higher priority in automatic mode. Options: --altdir <directory> change the alternatives directory. --admindir <directory> change the administrative directory. --log <file> change the log file. --force allow replacing files with alternative links. --skip-auto skip prompt for alternatives correctly configured in automatic mode (relevant for --config only) --verbose verbose operation, more output. --quiet quiet operation, minimal output. --help show this help message. --version show the version.
Посты чуть ниже также могут вас заинтересовать
In this article, we’ll show you how to upgrade Java 8 to Java 11 on Ubuntu 20.04
Step 1: Check the current installed Java version
$ java -version
Sample output:
sysadminxpert@Ubuntu:~$ java -version openjdk version "1.8.0_312" OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07) OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
Step 2: Install Java 11 on ubuntu
$ sudo apt install openjdk-11-jdk
Sample output:
sysadminxpert@Ubuntu:~$ sudo apt install openjdk-11-jdk Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless Suggested packages: openjdk-11-demo openjdk-11-source visualvm fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei The following NEW packages will be installed: openjdk-11-jdk openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless 0 upgraded, 4 newly installed, 0 to remove and 613 not upgraded. Need to get 263 MB of archives. After this operation, 408 MB of additional disk space will be used. Do you want to continue? [Y/n] Y Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [37.3 MB] Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [37.3 MB] Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [37.3 MB] Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [37.3 MB] Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [37.3 MB] Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [37.3 MB] Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [37.3 MB] Get:2 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jre amd64 11.0.15+10-0ubuntu0.20.04.1 [175 kB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.15+10-0ubuntu0.20.04.1 [223 MB] Get:4 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 openjdk-11-jdk amd64 11.0.15+10-0ubuntu0.20.04.1 [2,573 kB] Fetched 22.5 MB in 29min 54s (12.5 kB/s) Selecting previously unselected package openjdk-11-jre-headless:amd64. (Reading database ... 146978 files and directories currently installed.) Preparing to unpack .../openjdk-11-jre-headless_11.0.15+10-0ubuntu0.20.04.1_amd64.deb ... Unpacking openjdk-11-jre-headless:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... Selecting previously unselected package openjdk-11-jre:amd64. Preparing to unpack .../openjdk-11-jre_11.0.15+10-0ubuntu0.20.04.1_amd64.deb ... Unpacking openjdk-11-jre:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... Selecting previously unselected package openjdk-11-jdk-headless:amd64. Preparing to unpack .../openjdk-11-jdk-headless_11.0.15+10-0ubuntu0.20.04.1_amd64.deb ... Unpacking openjdk-11-jdk-headless:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... Selecting previously unselected package openjdk-11-jdk:amd64. Preparing to unpack .../openjdk-11-jdk_11.0.15+10-0ubuntu0.20.04.1_amd64.deb ... Unpacking openjdk-11-jdk:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... Setting up openjdk-11-jre-headless:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jjs to provide /usr/bin/jjs (jjs) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode Setting up openjdk-11-jre:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... Setting up openjdk-11-jdk-headless:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jar to provide /usr/bin/jar (jar) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/javac to provide /usr/bin/javac (javac) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/javap to provide /usr/bin/javap (javap) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jdeprscan to provide /usr/bin/jdeprscan (jdeprscan) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jfr to provide /usr/bin/jfr (jfr) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jimage to provide /usr/bin/jimage (jimage) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jlink to provide /usr/bin/jlink (jlink) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jmod to provide /usr/bin/jmod (jmod) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jps to provide /usr/bin/jps (jps) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jshell to provide /usr/bin/jshell (jshell) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/rmic to provide /usr/bin/rmic (rmic) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jaotc to provide /usr/bin/jaotc (jaotc) in auto mode update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jhsdb to provide /usr/bin/jhsdb (jhsdb) in auto mode Setting up openjdk-11-jdk:amd64 (11.0.15+10-0ubuntu0.20.04.1) ... update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/jconsole to provide /usr/bin/jconsole (jconsole) in auto mode Processing triggers for mime-support (3.64ubuntu1) ... Processing triggers for hicolor-icon-theme (0.17-2) ... Processing triggers for gnome-menus (3.36.0-1ubuntu1) ... Processing triggers for desktop-file-utils (0.24-1ubuntu2) ... sysadminxpert@Ubuntu:~$
Step 3: Set the default Java version on Ubuntu
If multiple java version is installed on your system then you need to follow the below steps to set a default java version.
Using the update-alternatives command to change the default Java version
$ sudo update-alternatives --config java
Sample output:
sysadminxpert@Ubuntu:~$ sudo update-alternatives --config java There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode * 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode Press <enter> to keep the current choice[*], or type selection number: 0 update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode sysadminxpert@Ubuntu:~$
Verify java version
$ java -version
Sample output:
sysadminxpert@Ubuntu:~$ java -version openjdk version "11.0.15" 2022-04-19 OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1) OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1, mixed mode, sharing) sysadminxpert@Ubuntu:~$
Step 4: Configure JAVA_HOME in Ubuntu
Add below line in ~/.bashrc
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")
Step 5: Verify JAVA_HOME path in Ubuntu
source ~/.bashrc echo $JAVA_HOME
Sample Output:
sysadminxpert@Ubuntu:~$ echo $JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64
End of article. We have shown you how to upgrade Java 8 to Java 11 on Ubuntu 20.04
See also:
List of monitoring tools
Linux Blogs
AWS Cloud Blogs
Database Blogs
DevOps Blogs
Interview Questions & Answers
Docker Blogs
Google Cloud Blogs
I followed all the instructions stated at this question, but am encountering some problems with the last part of it.
I actually have version 6.22 of java and would like to update to version 6.30.
So after moving the extracted directory java-6-oracle
into /usr/lib/jvm
I do not know what to do, since the script that is pointed out in the answer above updates from java 5 to java 6.
For sake of clearness here is output if I do an ls
in dir /usr/lib/jvm
:
$ ls -l /usr/lib/jvm
total 8
lrwxrwxrwx 1 root root 14 2011-07-12 15:18 default-java -> java-6-openjdk
lrwxrwxrwx 1 root root 14 2011-07-12 12:19 java-1.6.0-openjdk -> java-6-openjdk
drwxr-xr-x 10 root root 4096 2012-04-12 12:06 java-6.31-oracle
drwxr-xr-x 7 root root 4096 2012-02-24 14:43 java-6-openjdk
What should I do now?
ADDED PART
Under the suggestion of @fossfreedom I ran the script anyway and actually it updated the java version.
In fact if I run command java -version
output will be the following:
$ java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) Server VM (build 20.6-b01, mixed mode)
There is still a problem, if Irun javac -version
it gives me the old version installed:
$ javac -version
javac 1.6.0_22
And if I use the tester at this link it will tell me that version is
Java Version 1.6.0_22 from Sun Microsystems Inc.
What’s going wrong?
It seems that Java Runtime Environment has updated, but Java Compiler and Java plugin for browser have not.
How can I update them?
OTHER ADDED PART
sudo update-alternatives --config java
will return following output
$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6.31-oracle/bin/java 1062 auto mode
1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 manual mode
2 /usr/lib/jvm/java-6.31-oracle/bin/java 1062 manual mode
Press enter to keep the current choice[*], or type selection number:
these makes sense with the fact that JRE is correctly updated to version 6.31, issues are on Java Compiler and Java browser plugin.
Any ideas?
Вступление
Java — популярный язык разработки, на котором написано большое количество приложений, поэтому часто требуется запускать программное обеспечение на Java. Для этого Java необходимо установить и определить переменную JAVA_HOME. В этой инструкции расскажем, как выбрать версию Java и как ее поставить на Ubuntu 20.04.
Перед установкой
Мы будем устанавливать Java на облачном сервере с ОС Ubuntu 20.04. Чтобы заказать сервер, откройте панель управления Selectel. Перейдите в раздел Облачная платформа ⟶ Серверы. Нажмите Создать сервер.
В качестве источника для сервера выберите готовый образ Ubuntu 20.04 LTS 64-bit.
Добавьте подсеть с новым плавающим IP-адресом. Он нужен для подключения к облачному серверу по SSH.
Укажите остальные настройки, проверьте стоимость сервера и нажмите Создать. Подробная инструкция по созданию сервера есть в базе знаний.
После создания сервера подключитесь к нему по SSH с помощью команды:
ssh root@server_IP
В качестве server_IP используйте плавающий адрес, присвоенный серверу. Плавающий IP-адрес можно посмотреть на странице сервера вкладка Порты. Для подключения понадобится пароль для root, его можно найти на вкладке Консоль.
Облачные серверы Selectel
Читать подробнее
Сейчас версии Java выходят приблизительно раз в полгода. На момент подготовки статьи самая свежая версия — Java 18.
Чем JRE отличается от JDK
- JRE — среда выполнения, Java Runtime Environment. Наиболее важный компонент JRE — java, он запускает JVM (виртуальную машину Java). JVM же запускает ранее скомпилированные приложения Java, поэтому для создания новых программ JRE недостаточно.
- JDK — Java Development Kit, полноценный SDK, набор для разработки приложений на Java. В JDK входит JRE, компилятор Java (javac) и разные утилиты и инструменты (например, отладчик jdb).
Большое количество приложений на Java требуют установленную JRE для запуска. Если вам требуется только запускать приложения на Java, подойдет JRE.
Если вы планируете разрабатывать приложения, установите JDK. Часто вместо Java используется понятие JDK.
OpenJDK или Oracle JDK
Исходный код Java существует в проекте OpenJDK. Для работы нужны сборки, совместимые со спецификациями Java SE.
Есть две сборки Java:
- OpenJDK — опенсорсная версия, поддерживается Oracle и сообществом разработчиков;
- Oracle JDK — проприетарная сборка, выпускается и поддерживается компанией Oracle.
Разницы между свежими релизами Oracle JDK и OpenJDK практически нет. Основное отличие между ними — это лицензирование. С 2019 года для коммерческого использования Oracle JDK нужно покупать лицензию, при этом Oracle будет поставлять обновления. Для некоммерческих целей Oracle JDK бесплатна. OpenJDK можно использовать бесплатно в любых целях.
Установка Open JDK
Установка Open JDK выполняется через apt. Перед установкой обновите списки пакетов:
sudo apt update
Проверьте, установлена ли Java на сервере:
java -version
Если Java не установлена, в выводе будут предложены доступные версии и команды для их установки:
Command 'java' not found, but can be installed with:
apt install openjdk-11-jre-headless # version 11.0.15+10-0ubuntu0.20.04.1, or
apt install default-jre # version 2:1.11-72
apt install openjdk-13-jre-headless # version 13.0.7+5-0ubuntu1~20.04
apt install openjdk-16-jre-headless # version 16.0.1+9-1~20.04
apt install openjdk-17-jre-headless # version 17.0.3+7-0ubuntu0.20.04.1
apt install openjdk-8-jre-headless # version 8u312-b07-0ubuntu1~20.04
Можно установить дефолтную версию Java (поставляется с Ubuntu) или поставить отдельные версии.
Установка версии по умолчанию
По умолчанию в стандартные репозитории Ubuntu 20.04 входит Open JDK 11. Чтобы ее установить, используйте:
sudo apt install default-jre
Проверьте, установилась ли версия:
java -version
Вывод команды:
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1, mixed mode, sharing)
JRE полностью подходит для запуска любого ПО Java. Но, как мы говорили ранее, для компиляции помимо JRE может понадобиться и JDK. Чтобы установить дефолтную версию JDK (при этом установится JRE):
sudo apt install default-jdk
Проверьте версию установившегося компилятора javac:
javac -version
Результат:
javac 11.0.15
Установка определенной версии OpenJDK
Если вы хотите поставить определенную версию OpenJDK, то укажите версию в команде.
Например, для установки одиннадцатой версии:
sudo apt install openjdk-11-jdk
Например, можно установить OpenJDK 8, на которой работает большое количество приложений:
sudo apt install openjdk-8-jdk
Посмотрите, какая версия Java установилась:
java -version
Установка Oracle Java (Oracle JDK)
Перейдите на официальный сайт Oracle, чтобы скачать архив нужной версии. Мы будем скачивать Java SE Development Kit 16, на момент выпуска статьи это архивный релиз для Java SE Platform.
Скачайте Linux x64 Compressed Archive (для примера мы скачаем архив не на сервер, а на локальный компьютер):
Отключитесь от сервера и скопируйте архив на сервер:
scp Downloads/jdk-16_linux-x64_bin.tar.gz root@server_ip:~
Downloads/jdk-16_linux-x64_bin.tar.gz — путь до архива на вашем компьютере.
Когда загрузка закончится, подключитесь по SSH к облачному серверу. Уже на сервере распакуйте архив:
tar zxvf jdk-16_linux-x64_bin.tar.gz
Добавьте PPA-репозиторий с установщиком Java — linuxuprising:
sudo add-apt-repository ppa:linuxuprising/java
В выводе появится информация о репозиториях и версиях. Нажмите Enter для продолжения.
Обновите списки пакетов:
sudo apt update
sУстановите Oracle JDK 18:
sudo apt install oracle-java16-installer --install-recommends
Подтвердите соглашение о лицензии, прокрутив до конца и нажав Ok:
Выберите Yes:
Посмотрите, какая версия установилась:
java -version
Ответ будет выглядеть так:
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
Проверьте, правильная ли версия компилятора javac установилась:
javac -version
Пример результата:
javac 16.0.1
Переключение между несколькими версиями Java
Вы можете установить или изменить дефолтную версию Java, если, например, на сервере установлено несколько версий одновременно:
update-alternatives --config java
В выводе будут показаны все установленные версии, активная будет помечена звездочкой:
There are 3 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-16-oracle/bin/java 1091 manual mode
3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
Press to keep the current choice[*], or type selection number:
Нажмите Enter, чтобы оставить текущий выбор, или введите номер из столбца Selection той версии, которую хотите сделать дефолтной версией.
То же самое можно сделать с версиями javac:
update-alternatives --config javac
Переменная JAVA_HOME
Множество приложений на Java используют JAVA_HOME. Это переменная окружения — она указывает на путь, по которому установлена Java.
Сначала определите путь, по которому установлена Java:
sudo update-alternatives --config java
В выводе будут все установленные версии и их директории:
There are 3 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-16-oracle/bin/java 1091 manual mode
3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
Press to keep the current choice[*], or type selection number:
В выводе показаны следующие пути:
- OpenJDK 8 — /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java;
- OpenJDK 11 — /usr/lib/jvm/java-11-openjdk-amd64/bin/java;
- Oracle Java 16 — /usr/lib/jvm/java-16-oracle/bin/java.
Скопируйте путь до активной версии, затем нажмите Enter. В нашем примере активна Oracle Java 16.
Откройте директорию /etc/environment (это предпочтительный путь до JAVA_HOME) в редакторе nano:
sudo nano /etc/environment
Добавьте строку с JAVA_HOME в конце файла. При этом не включайте в путь часть с bin/:
JAVA_HOME="/usr/lib/jvm/java-16-oracle"
Введите Ctrl+X, затем Y+Enter — это сохранит файл и закроет редактор. Путь будет заменен.
Загрузите переменные:
source /etc/environment
Проверьте, что путь до JAVA_HOME задан верно:
echo $JAVA_HOME
В выводе должна быть именно эта директория:
/usr/lib/jvm/java-16-oracle
Удаление Java
OpenJDK
Чтобы полностью удалить все версии OpenJDK, которые были установлены, используйте команду:
sudo apt purge openjdk*
Для удаления только конкретной версии нужно ее указать, например:
sudo apt purge openjdk-11*
или
sudo apt purge openjdk-8*
Oracle Java
Чтобы полностью удалить Oracle Java:
sudo apt purge oracle-java*
Для удаления конкретной версии, например, версии 11:
sudo apt purge oracle-java11-installer
Теперь можно удалить PPA-репозиторий:
sudo add-apt-repository --remove ppa:linuxuprising/java
Заключение
В этой инструкции мы рассмотрели отличия версий Java. Посмотрели, как можно запустить виртуальную машину Java (JVM) и как поставить в Ubuntu сразу несколько версий Java.
Иногда необходимо использовать другую версию java для корректной работы того или иного проекта.
1. Для этого необходимо скачать необходимую версию с сайта
2. Извлекаем содержимое архива -> /usr/lib/jvm/
3. Устанавливаем альтернативные ссылки:
update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0_60/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0_60/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0_60/bin/javaws" 1
4. Изменяем ссылки на Java, Javac, Javaws:
update-alternatives --config java
Есть 4 варианта для альтернативы java (предоставляет /usr/bin/java).
Выбор Путь Приор Состояние
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1072 автоматический режим
1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 ручной режим
2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1072 ручной режим
3 /usr/lib/jvm/jdk1.7.0_60/bin/java 1 ручной режим
* 4 /usr/lib/jvm/jdk1.8.0_05/bin/java 1 ручной режим
Нажмите enter, чтобы сохранить текущий выбор[*], или введите выбранное число: 3
update-alternatives: используется /usr/lib/jvm/jdk1.7.0_60/bin/java для предоставления /usr/bin/java (java) в ручной режим
update-alternatives --config javac
Есть 4 варианта для альтернативы javac (предоставляет /usr/bin/javac).
Выбор Путь Приор Состояние
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/bin/javac 1072 автоматический режим
1 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1071 ручной режим
2 /usr/lib/jvm/java-8-oracle/bin/javac 1072 ручной режим
3 /usr/lib/jvm/jdk1.7.0_60/bin/javac 1 ручной режим
* 4 /usr/lib/jvm/jdk1.8.0_05/bin/javac 1 ручной режим
Нажмите enter, чтобы сохранить текущий выбор[*], или введите выбранное число: 3
update-alternatives: используется /usr/lib/jvm/jdk1.7.0_60/bin/javac для предоставления /usr/bin/javac (javac) в ручной режим
update-alternatives --config javaws
Есть 5 вариантов для альтернативы javaws (предоставляет /usr/bin/javaws).
Выбор Путь Приор Состояние
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/javaws 1072 автоматический режим
1 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws 1061 ручной режим
2 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/javaws 1071 ручной режим
3 /usr/lib/jvm/java-8-oracle/jre/bin/javaws 1072 ручной режим
4 /usr/lib/jvm/jdk1.7.0_60/bin/javaws 1 ручной режим
* 5 /usr/lib/jvm/jdk1.8.0_05/bin/javaws 1 ручной режим
Нажмите enter, чтобы сохранить текущий выбор[*], или введите выбранное число: 4
update-alternatives: используется /usr/lib/jvm/jdk1.7.0_60/bin/javaws для предоставления /usr/bin/javaws (javaws) в ручной режим
Проверяем версию Java:
java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)