在尝试从源代码编译 OpenJDK 时,最新的通用版本 (OpenJDK 10.0.1) 坚持使用 OpenJDK 9 或 10。但是 JDK 11 直到2018 年 9 月。
然而令我惊讶的是,当我这样做时apt search openjdk
结果是:
...
openjdk-11-jdk - OpenJDK Development Kit (JDK)
...
openjdk-8-jdk - OpenJDK Development Kit (JDK)
...
没有 OpenJDK 9 或 10!
等等,那是 OpenJDK 11 吗?也许是 Beta 版本?不……
所以我看了一下apt show openjdk-11-jdk
:
Package: openjdk-11-jdk
Version: 10.0.1+10-3ubuntu1
...
为什么 OpenJDK 10 被打包为 openjdk-11-*??
答案1
这是因为这些软件包在发布时将成为 OpenJDK 11。请参阅此邮件列表帖子:
我代表 Ubuntu Foundations 团队请求 OpenJDK 的 SRU 例外。我们的计划是将 OpenJDK 10 发布为默认 JRE/JDK1适用于 Bionic,然后在 2018 年 9 月/10 月将主中的默认 JRE/JDK 作为 SRU 移至 OpenJDK 11。
= 拟议计划 =
Bionic 将与 OpenJDK 10 一起发布,作为默认的 JRE/JDK,一旦达到 GA,OpenJDK 11 将取代它。
...
如果我们要在发布后切换到 Bionic 中的 OpenJDK 11,我们希望避免在发布时将 OpenJDK 8 用作 Bionic 中的默认 JRE/JDK,因为 8 和 11 之间存在的任何额外接口差异不仅会导致存档出现故障,还会使 JDK 的外部使用者出现故障。相比之下,OpenJDK 10 和 OpenJDK 11 之间的接口差异预计会相当小,尤其是与我们已经知道的 OpenJDK 8 和 OpenJDK 9 之间的差异相比。因此,我们应该在 18.04 中将 OpenJDK 10 作为默认 JDK 发布,并在 OpenJDK 11 发布时过渡到 OpenJDK 11。
这也是为什么源包openjdk-11-*
实际上被称为openjdk-lts
。
错误报告已提交 - 请订阅(但除非您有新信息要添加,否则请不要发表评论,但这不太可能)。Ubuntu 开发人员 Jeremy Bicha 已做出回应:
目的是在 Ubuntu 18.04 LTS 中将 openjdk-11 升级到 11。这就是它被这样命名的原因。这是一个重大变化,需要一些时间来准备。没有必要要求它完成,因为它会完成。
Ubuntu 18.04 LTS 是在 OpenJDK 11 发布前几个月发布的,因此在 Ubuntu 18.04 LTS 发布之前无法提供 OpenJDK 11。
https://lists.ubuntu.com/archives/ubuntu-release/2018-March/004364.html
带来不便敬请谅解。
2018-11-24:请不要要求 ETA。这会向订阅此错误的每个人发送电子邮件,但无助于修复错误。
该错误正在处理中。openjdk 11.0.1 在 18.10 中进行了更新,并且在 18.04 LTS 中有一个需要快速处理的安全更新。11.0.1 准备就绪后将出现在 18.04 LTS 中,但这是一个重大变化,需要仔细协调。
2019-02-26:此错误已在错误 1814133 中处理,因此我将其标记为重复。进一步的讨论应该针对该错误进行,而不是在这里进行。
A新的错误报告已经打开以跟踪所有需要进行的更改,并且有一个很多大约有 140 个。错误报告摘录如下:
此次过渡是 openjdk-lts 从 openjdk-10 到 openjdk-11 的安全更新。这引入了运行时和 FTBFS 问题,因此也需要将多个软件包反向移植到安全套件中。
这些软件包是根据 https://launchpad.net/~openjdk-11-transition团队。PPA 完全依赖于安全口袋,并且分阶段进行。
基金会和安全团队之间商定的流程是,PPA 中的软件包将以二进制形式复制到 bionic-proposed 中,检查迁移问题,然后(如果没有问题)复制到 bionic-security 中。
[...]
一些软件包可能也需要在 Cosmic 中进行更新,但作为例外,这将在 Bionic 转换完成后进行。
另一位 Ubuntu 开发人员Tiago Stürmer Daitx 指出:
[我们]计划更新受此转变影响的 Java 应用程序。
更具体地说,任何无法在 openjdk-11 下正确运行的软件包都会受到调查,并成为更新的候选。更新并不一定意味着我们将使用最新版本:我们可能只是应用或反向移植允许它们在 openjdk-11 下工作的更改。
目前还没有 ETA。过渡团队维护的各种 PPA 中已经更新并添加了不少软件包,因此如果您希望帮助测试,请查看它们。
2019年4月17日更新:
似乎修复程序已发布。现在apt show openjdk-11-jdk
显示:
Package: openjdk-11-jdk
Version: 11.0.2+9-3ubuntu1~18.04.3
输出为java -version
:
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)
答案2
请参阅上面 muru 的回答,
但为了解决这个问题,您可以手动安装 openjdk 11 并将其添加到 update-alternatives 中,这样您就可以切换版本,当官方软件包更新时,您就可以切换到它。请参见下文了解如何操作:
$ wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz -O /tmp/openjdk-11.0.2_linux-x64_bin.tar.gz
$ sudo tar xfvz /tmp/openjdk-11.0.2_linux-x64_bin.tar.gz --directory /usr/lib/jvm
将 jdk 解压到 /usr/lib/jvm/jdk-11.0.2 下
然后将其添加到备选系统
sudo sh -c 'for bin in /usr/lib/jvm/jdk-11.0.2/bin/*; do update-alternatives --install /usr/bin/$(basename $bin) $(basename $bin) $bin 100; done'
sudo sh -c 'for bin in /usr/lib/jvm/jdk-11.0.2/bin/*; do update-alternatives --set $(basename $bin) $bin; done'
在替代方案中查看
$ 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 1101 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
* 3 /usr/lib/jvm/jdk-11.0.2/bin/java 100 manual mode
Press <enter> to keep the current choice[*], or type selection number: 3
检查它是否有效
$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)