如何将OpenJDK 6替换为OpenJDK 7?

令人惊讶的是(因为OpenJDK 7大约4个月前已经发布),Ubuntu 11.10仍然默认使用OpenJDK 6而不是7。我应该如何解决这个问题?我更希望完全移除OpenJDK 6,让OpenJDK 7成为默认的jdk和jre。
我不想使用官方的Oracle tarballs,我想要deb repos - 即标准的Ubuntu方式。

有人需要将其构建为Debian软件包,并将其放入Launchpad上的PPA中。如果还没有人这样做,你可以选择制作一个.deb文件或者安装tar包。 - Martin Ueding
依然适用于12.04。 - Thorbjørn Ravn Andersen
2011年-现在 2012年-这个问题真的解决了吗(到底哪一个被认为是答案哈哈?如果没有,我会在我的问题/回答中写一篇好的维基百科文章。 - user25165
升级您的系统到LTS会更好。 - KK Patel
访问http://askubuntu.com/questions/64329/how-to-replace-openjdk-6-with-openjdk-7 - user203206
4个回答

问题在于default-jre软件包依赖于OpenJDK 6,而大多数其他软件包的依赖关系定义为default-jre | openjdk-6-jre | sun-java6-jre - 因此,在OpenJDK 7成为官方支持并被用作默认版本之前,或者直到所有依赖Java的软件包更新其依赖关系之前,您必须保留OpenJDK 6,并使用update-java-alternatives将OpenJDK 7设置为默认版本。以下是64位系统的示例:
$ update-java-alternatives -l
java-1.6.0-openjdk 1061 /usr/lib/jvm/java-1.6.0-openjdk
java-1.7.0-openjdk-amd64 1051 /usr/lib/jvm/java-1.7.0-openjdk-amd64
$ sudo update-java-alternatives -s java-1.7.0-openjdk-amd64

在32位系统上,目录名称会有所不同,您可以使用-l开关找到正确的名称。第二个命令可能会产生很多错误;要么使用--jre开关,要么只是忽略错误 - 脚本会尽力更改它能够更改的部分,并忽略其余部分。
从理论上讲,可以编辑default-jre软件包以依赖于OpenJDK 7,但请注意,这可能会带来更多的伤害而不是好处。

2为了让这在Precise上运行起来,我必须确保每个openjdk-6或icedtea-6软件包都有一个相应的openjdk-7或icetea-7软件包,否则update-java-alternatives将无法成功切换。 - Blair Zajac
2在安装了icedtea-7-plugin($ sudo apt-get install icedtea-7-plugin)之后,在Ubuntu 12.04上运行良好。谢谢。 - David

为此,您必须在系统上安装两个版本的jdk。您可以使用apt-get下载它们。
之后尝试,
$ sudo update-alternatives --config java

选择您想要使用的JDK。
有时候Openjdk对于某些应用程序来说并不理想。
您还可以尝试使用Oracle-Java或Sun-Java。
以下链接对此非常有帮助:

http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html


OpenJDK 7在11.10的正常Ubuntu仓库中,如果你搜索openjdk-7-jre和openjdk-7-jdk并使用apt-get/synaptic/software centre安装它们,它们应该会替换openjdk-6。如果没有替换成功,你可以先使用apt-get purge openjdk-6-*移除openjdk-6-*软件包。


1openjdk-7-* 包似乎是要与 openjdk-6-* 并存安装的。如果我尝试移除 openjdk-6-*,会有大量依赖包需要一并移除(尽管我知道其中一些应用程序与 Java 7 完美兼容)。 - Ivan
显然,“default-jre”仍然指向Java 6。 - Thorbjørn Ravn Andersen


1这似乎不适用于11.10版本。 - Ivan