emacs/var/elfeed/db/data/af/afb6bac8962c704f1c76ed8ee2a54bc8a6065b39
2022-01-03 12:49:32 -06:00

68 lines
3.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<p>Today I encountered a bug that was specific to JDK 16 on a project I was working
on, and I needed to switch back my Java version to something older. I realized
I had forgotten (once again) how to switch between multiple Java version on Ubuntu
(Debian), so Ive decided to write a short article that would help me remember
this better.<sup id="fnref:1"><a class="footnote" href="https://batsov.com/articles/2021/12/10/working-with-multiple-versions-of-java-on-ubuntu/#fn:1" rel="footnote">1</a></sup></p>
<p>You can install easily multiple version of Java on Ubuntu via <code class="language-plaintext highlighter-rouge">apt</code>:</p>
<pre><code class="language-shellsession">$ sudo apt install openjdk-8-jdk openjdk-8-source openjdk-8-doc
$ sudo apt install openjdk-11-jdk openjdk-11-source openjdk-11-doc
</code></pre>
<p>Typically the newest version of Java you install will become the default, but you can easily change this:</p>
<pre><code class="language-shellsession">$ 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/bin/java 1081 manual mode
Press &lt;enter&gt; to keep the current choice[*], or type selection number:
</code></pre>
<p>Notice that pressing 0 mean “auto-select the newest Java available” (in our case Java 11).
You can now select Java 8 by pressing 2 and verify the command worked properly like this:</p>
<pre><code class="language-shellsession">$ java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
</code></pre>
<p>Youll need to repeat the above steps for <code class="language-plaintext highlighter-rouge">javac</code> (the Java compiler binary) as well:</p>
<pre><code class="language-shellsession">$ sudo update-alternatives --config javac
</code></pre>
<p>This much I already knew, even if I keep forgetting the exact name of
<code class="language-plaintext highlighter-rouge">update-alternatives</code>, but today I learned something new as well. You can
actually simplify the process a bit by using the specialized command
<code class="language-plaintext highlighter-rouge">update-java-alternatives</code>:</p>
<pre><code class="language-shellsession">$ update-java-alternatives -l
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64
$ sudo update-java-alternatives -s java-1.11.0-openjdk-amd64
</code></pre>
<p>Quite handy! You can also go back to the latest Java version with a shorthand:</p>
<pre><code class="language-shellsession">$ sudo update-java-alternatives -a
</code></pre>
<p><code class="language-plaintext highlighter-rouge">-a</code> stands for <code class="language-plaintext highlighter-rouge">--auto</code>, meaning the Java version with highest priority (in our case Java 11 with priority 1111).</p>
<p>Thats all I have for you today. Short and sweet!</p>
<div class="footnotes">
<ol>
<li id="fn:1">
<p>Or at least look up the information faster. <a class="reversefootnote" href="https://batsov.com/articles/2021/12/10/working-with-multiple-versions-of-java-on-ubuntu/#fnref:1">↩</a></p>
</li>
</ol>
</div>