如何设置默认的Java版本?

我按照问题中提到的所有指示进行操作,但在最后一部分遇到了一些问题。
实际上,我有Java 6.22版本,并希望更新到6.30版本。
所以,在将提取的目录java-6-oracle移动到/usr/lib/jvm之后,我不知道该怎么做,因为上面的答案中指出的脚本是从Java 5升级到Java 6的。
为了清楚起见,这是我在/usr/lib/jvm目录下执行ls命令的输出结果:
$ 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

我现在该做什么?


新增部分

在@fossfreedom的建议下,我还是运行了脚本,实际上它更新了Java版本。

事实上,如果我运行命令java -version,输出将如下所示:

$ 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)

还有一个问题,如果我运行javac -version,它会显示安装的旧版本。
$ javac -version
javac 1.6.0_22

如果我在这个链接上使用测试工具,它会告诉我那个版本是什么。
Java Version 1.6.0_22 from Sun Microsystems Inc.

怎么了?
看起来Java运行环境已经更新了,但是Java编译器和浏览器的Java插件还没有。
我该如何更新它们?

其他添加的部分

sudo update-alternatives --config 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-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:

这些与JRE已正确更新至版本6.31的事实相符,问题出在Java编译器和Java浏览器插件上。
有任何想法吗?

@fossfreedom 我还没有尝试过,因为我认为这不是一个好主意,它明确地写给Java 5到6的上传版本,但我应该尝试吗? - Matteo
1嗯,也许你可能会混淆webupd8脚本是0.5b版本?那只是脚本的版本号,它并不涉及Java版本。试试看吧。让我们看看运行脚本时窗口的截图。 - fossfreedom
@fossfreedom 哎呀,那真是把我搞糊涂了;D 我运行了脚本!检查一下相关的修改吧!非常感谢你的帮助。 - Matteo
多么奇怪啊...从未遇到过这种情况。不管怎样,看一下下面的答案吧 - 你应该能够像示例那样使用sudo update-alternatives命令。 - fossfreedom
@fossfreedom 再次更新问题! - Matteo
让我们在聊天中继续这个讨论。 - Matteo
javac --version 是用于 JDK,而 java --version 是用于 JRE。 - Ashu
@Matteo - 答案已更新 - 您需要按照插件安装说明进行操作,具体请参考http://askubuntu.com/questions/67909/how-do-i-install-oracles-jdk-6/89080#89080 - fossfreedom
@Ashu - javac --version 是用于Java编译器,而java --version 是用于JRE(我想是这样的) - Matteo
http://stackoverflow.com/questions/6477415/how-to-set-oracles-java-as-the-default-java-in-ubuntu/22392627 - Ciro Santilli OurBigBook.com
8个回答

关于你的第一个问题:
可能你把webupd8脚本的版本0.5b和Java版本混淆了。那只是脚本的版本,与Java版本无关。
关于设置javac版本的问题。
我猜你需要明确指定javac编译器的路径。
比如说,
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-6.31-oracle/bin/javac" 1

跟着:
sudo update-alternatives --config javac

关于设置Java Chrome插件的问题。
主要问题是: 我如何安装Oracle JDK 6? 包含了以下信息 - 由于您的文件夹结构略有不同,您的链接命令应该是:
ln -s /usr/lib/jvm/java-6.31-oracle/jre/lib/i386/libnpjp2.so ~/.mozilla/plugins/

单独执行此操作只会更改编译器 - 请参阅下面的答案以获取处理所有与Java相关的替代方案切换的update-java-alternatives,我的系统上有82个。 - Greg
101% 正确和完美,我用这个来完善我的 Java JDK 19 adesoji@adesoji-Lenovo-Legion-7-15IMH05:~$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk-19/bin/javac" 1,结果很好。 - undefined

查看this;运行
sudo  update-java-alternatives --list

列出机器上所有的Java安装,按名称和目录进行分类,并运行。
sudo  update-java-alternatives --set [JDK/JRE name e.g. java-8-oracle]

选择使用哪个JRE/JDK。

如果您想为每个Java任务使用不同的JDKs/JREs,您可以运行update-alternatives来配置一个java可执行文件;您可以运行

sudo  update-alternatives --config java[Tab]

查看可以配置的Java命令(java、javac、javah、javaws等)。然后。
sudo  update-alternatives --config [javac|java|javadoc|etc.]

将Java任务/命令与特定的JDK/JRE关联起来。
对于某些应用程序,您可能还需要设置JAVA_HOME:您可以从this answer中使用。
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

对于JREs,或者
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")

适用于JDK。


第一个命令不需要sudo :) - Al.G.

我认为你应该看一下来自java-common包的update-java-alternatives命令和它使用的*.jinfo文件。通过这个命令,你应该能够在不考虑JDK、JRE等因素的情况下完全切换Java安装。

2我尝试了update-java-alternatives命令,然后java -version显示正确,但是$JAVA_HOME的链接仍然不正确...我手动更改了该链接,但我想知道update-java-alternatives是否在这方面缺少了一些东西。 - Alexis Wilke

在Ubuntu/Linux上,您可以使用以下命令切换Java版本:
update-alternatives --config java

但在此之前,您需要安装该版本。
您可以使用此脚本(./install-java.sh)来安装多个JVM。
#!/bin/sh
(
lookforJdks=$PWD
echo "Directory: $lookforJdks"
jdks=`test -e ./javac || find $lookforJdks -type d -iname '*jdk1.*' 2> /dev/null`
#set -e
echo 'which jdk do you want to choose? looking for jdks. This might take a while'
echo "$jdks" | awk '{printf("%5d : %s\n", NR,$0)}'
read choose
test -e ./javac || cd `echo "$jdks" | tr '\n' ',' | cut -d',' -f $choose`/bin
for e in appletviewer extcheck idlj jar jarsigner java javac javadoc javah javap jconsole \
 jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic \
 schemagen serialver wsgen wsimport xjc jvisualvm jmc; do sudo update-alternatives \
 --install /usr/bin/$e $e $(readlink -f ./$e) 100; done
)

echo "RUN update-alternatives --config java"

将此脚本放置在解压了JVM的文件夹中,并运行:
/opt/install-java.sh

下一步使用:
update-alternatives --config java

为什么不使用软件更新程序来安装各种JDK/JRE呢? - TheGeeko61

如果你要手动设置javac、javaws、javadoc或其他与Java相关的命令的替代选项,你可能希望将它们作为java替代选项的从属。
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/jdk1.8.0_74/bin/java" 0 --slave "/usr/bin/javadoc" "javadoc" "/opt/jdk1.8.0_74/bin/javadoc"


update-alternatives: updating alternative /opt/jdk1.8.0_74/bin/java because link group java has changed slave links


:/opt/jdk1.8.0_74$ sudo update-alternatives --display java

java - 自动模式 最佳版本的链接为/opt/jdk1.8.0_74/bin/java 链接当前指向/opt/jdk1.8.0_74/bin/java java链接为/usr/bin/java javadoc从属程序为/usr/bin/javadoc /opt/jdk1.8.0_74/bin/java - 优先级为0 javadoc从属程序: /opt/jdk1.8.0_74/bin/javadoc
将"/opt/jdk1.8.0_74/"更改为您安装JDK的目录。

这就是所需的...一种统一的切换Java版本的方式...但是在update-alternatives和update-java-alternatives之间存在一种舞蹈...我在所有这些答案中都没有看到一个明确的方向(就像章鱼一样)同时朝着许多不同的方向前进,导致没有通用解决方案...我们已经从5和6版本过渡到了17和18版本。大多数这些答案都不能满足要求。这个答案是一个很好的开始...结合jinfo的细节以及update-alternatives和update-java-alternatives之间的舞蹈。 - TheGeeko61

如果你需要自动切换到Java 8(编译器1.8),比如在一个一行命令中,比如用于脚本或持续集成测试套件,你可以运行以下命令。
sudo update-java-alternatives -s $(sudo update-java-alternatives -l | grep 8 | cut -d " " -f1) || echo '.'


它将自动获取可用的Java 8版本,并使用命令update-java-alternatives进行设置。
末尾的|| echo '.'只是确保命令返回成功,因为奇怪的是,默认情况下update-java-alternatives会返回错误(1)。如果您不需要此功能进行测试套件,则可以跳过它。
如果您想切换到其他版本,只需在上一个命令中将8替换为您想要的版本即可。

Ubuntu系统使用的默认Java版本。
update-alternatives --config java

Ubuntu使用的默认javac版本。
update-alternatives --config javac

使用环境变量$JAVA_HOME来查找Java(JRE或JDK)路径的应用程序。
export JAVA_HOME=/usr/lib/jvm/java-20-openjdk-amd64


打开任何文本编辑器,然后在/etc/environment中添加以下行:
JAVA_HOME="usr/lib/jvm/open-jdk 

- Java路径可能会不同。
通过运行以下命令使用源加载变量:

source /etc/environment

然后通过运行以下命令来检查变量:
echo $JAVA_HOME

运行以下命令来设置路径:

在设置好路径之后,运行该命令:

sudo  update-java-alternatives --list

选择您的默认Java版本。

读取 /etc/environment 文件也会破坏你的 PATH 环境变量。 - TheGeeko61