sudo update-alternatives --config java
Configures the default for the program "java". That's the Java VM.
sudo update-alternatives --config javac
Configures the default Java compiler.
You can also see that, because the first command lists a lot of "JRE" (Java Runtime Environment) folders and the Program is just called "java".
If I check which version is being used by issuing the command
java -version
or
javac -version,
I can see, that each command changes the program being used.
However, using update-java-alternatives with a JDK Version changes both programs for me. Using the first commands, you can use a Java VM and Java Compiler from different JDKs.
update-java-alternatives requires presence of a file with extension .jinfo in directory /usr/lib/jvm. The openjdk package is shipped with a .jinfo file, the jdk of Oracle (formerly Sun) is not. As alternative, you configure alternatives without update-java-alternatives:
For example, to add java from jvm-directory /usr/lib/jvm/jdk-12.0.1 (default directory of Debian package of Oracle) with priority 2082, use the following command:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-12.0.1/bin/java 2082
As for switching for different development environments:
Are you talking about starting the IDE itself with different Java versions or using different versions in the IDE for compilation and running your app?
For 1.: You can specify which JVM to use in the eclipse.ini, as described here. I don't know how to do that for the Arduino IDE.
For 2.: In Eclipse you can select the JRE/JDK to be used in Window -> Preferences -> Java -> Installed JREs. And under Java -> Compiler you could choose an older Java compliance if you wish.
EDIT: This DigitalOcean page also has a very nice explanation of everything related to Java on Ubuntu.
Answer from Benjamin Maurer on askubuntu.comsudo update-alternatives --config java
Configures the default for the program "java". That's the Java VM.
sudo update-alternatives --config javac
Configures the default Java compiler.
You can also see that, because the first command lists a lot of "JRE" (Java Runtime Environment) folders and the Program is just called "java".
If I check which version is being used by issuing the command
java -version
or
javac -version,
I can see, that each command changes the program being used.
However, using update-java-alternatives with a JDK Version changes both programs for me. Using the first commands, you can use a Java VM and Java Compiler from different JDKs.
update-java-alternatives requires presence of a file with extension .jinfo in directory /usr/lib/jvm. The openjdk package is shipped with a .jinfo file, the jdk of Oracle (formerly Sun) is not. As alternative, you configure alternatives without update-java-alternatives:
For example, to add java from jvm-directory /usr/lib/jvm/jdk-12.0.1 (default directory of Debian package of Oracle) with priority 2082, use the following command:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-12.0.1/bin/java 2082
As for switching for different development environments:
Are you talking about starting the IDE itself with different Java versions or using different versions in the IDE for compilation and running your app?
For 1.: You can specify which JVM to use in the eclipse.ini, as described here. I don't know how to do that for the Arduino IDE.
For 2.: In Eclipse you can select the JRE/JDK to be used in Window -> Preferences -> Java -> Installed JREs. And under Java -> Compiler you could choose an older Java compliance if you wish.
EDIT: This DigitalOcean page also has a very nice explanation of everything related to Java on Ubuntu.
update-java-alternatives is a program to update alternatives for jre/jdk installations.
update-alternatives is a symbolic link management system for linux (I'm sure there is little news here).
You can, and really should, use both update-java-alternatives and update-alternatives together.
Firstly, be sure to have the all the alternatives configured correctly. java and javac are but a few. There is javadoc, rmic, serialver and others, substituting the above variables for: native2ascii and /opt/jdk1.8.0_40/bin/native2ascii should report if the alternative is installed and/or selected.
When all the alternatives are configured you can then create links in /usr/lib/jvm to your manual instalation.
In order to configure update-java-alternatives you must use a hidden file with the same name as your directory but prefixed by a . (dot).
Hope this helps.
Bibliography
man -S 8 update-java-alternatives
http://tech.lanesnotes.com/2008/03/using-alternatives-in-linux-to-use.html
https://stackoverflow.com/questions/6477415/how-to-set-oracles-java-as-the-default-java-in-ubuntu
debian - How to use the command update-alternatives --config java - Stack Overflow
Update-alternatives - Java
Replacement for Java?
How to update my Java from 17 to 22?
Videos
Assuming one has installed a JDK in /opt/java/jdk1.8.0_144 then:
Install the alternative for javac
$ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1Check / update the alternatives config:
$ sudo update-alternatives --config javac
If there is only a single alternative for javac you will get a message saying so, otherwise select the option for the new JDK.
To check everything is setup correctly then:
$ which javac
/usr/bin/javac
$ ls -l /usr/bin/javac
lrwxrwxrwx 1 root root 23 Sep 4 17:10 /usr/bin/javac -> /etc/alternatives/javac
$ ls -l /etc/alternatives/javac
lrwxrwxrwx 1 root root 32 Sep 4 17:10 /etc/alternatives/javac -> /opt/java/jdk1.8.0_144/bin/javac
And finally
$ javac -version
javac 1.8.0_144
Repeat for java, keytool, jar, etc as needed.
You will notice a big change when selecting options if you type in "java -version" after doing so. So if you run update-alternatives --config java and select option 3, you will be using the Sun implementation.
Also, with regards to auto vs manual mode, making a selection should take it out of auto mode per this page stating:
When using the
--configoption, alternatives will list all of the choices for the link group of which given name is the master link. You will then be prompted for which of the choices to use for the link group. Once you make a change, the link group will no longer be inauto mode. You will need to use the--autooption in order to return to the automatic state.
And I believe auto mode is set when you install the first/only JRE/JDK.
java -version is running the wrong version of java.
Diagnostics:
>java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b18, mixed mode)
the following is the Java related contents from the output of
PATH:
PATH=C:\ProgramData\Oracle\Java\javapath; ... C:\Program Files\Java\jdk1.6.0_45\bin
Conclusion:
From the above output we can deduce that C:\ProgramData\Oracle\Java\javapath is 1.8.0_66.
You need to change your PATH to put C:\Program Files\Java\jdk1.6.0_45\bin first.
I noticed that after checking the path per your suggestion. Windows 10 does not allow me to edit the path because it says "This environment variable is too large." I know there should be another question to deal with this separately.
You also need to clean up your path. My guess is you have a lot of duplicate entries.
I have the same problem, I have set JAVA_HOME:
C:\Program Files\Java\jdk1.7.0_75
and Path to:
%JAVA_HOME%\bin
I need run jdk 7. When I run java -version it always appear jdk 8.
I solved it with: in System Environment --> Path --> order %JAVA_HOME%\bin to first.
I know that using update-alternatives, one can switch between different versions of java installed on the systems.
The problem I have with this is that one should not only switch the java and javac command, but also all those binaries like: jar, javap, javadoc and so one. Is that not hard and tedious to do? Am I doing it wrong?
I don't really need or want to switch java versions, I'm just curious what is the solution for this problem.
With the changes to the commercial usage for Java coming up, what are people looking at to use as a replacement that does not need commercial licensing?
I was looking at Zulu, but some of the older stations are using a A/S400 based applivation that does not seem to play well with it. Any suggestions?
Just as the title says. I have Java 17 on my computer and I want to update to the latest version (which I believe is 22). I went to my Java configure menu and clicked on update but it says that my Java is up to date. So, I'm not sure what I'm doing wrong. If someone can ELI5 this for me, I would be grateful, thank you!