为什么OpenJDK 10被打包成openjdk-11-*?

在尝试从源代码编译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-*了?
2个回答

这是因为当OpenJDK 11发布时,这些软件包将变成OpenJDK 11。请参阅此邮件列表帖子
代表Ubuntu基础团队,我请求对OpenJDK进行SRU例外。我们的计划是将OpenJDK 10作为Bionic的默认JRE/JDK1发布,并在2018年9月/10月将主要的默认JRE/JDK转换为OpenJDK 11作为SRU。
= 提议计划 =
Bionic将使用OpenJDK 10作为默认的JRE/JDK,并在OpenJDK 11达到GA后替换它。
...
如果我们打算在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。
抱歉给您带来不便。
2018-11-24:请不要询问预计完成时间。这会向订阅此错误的每个人发送电子邮件,并不能帮助修复错误。
正在处理此错误。openjdk 11.0.1已在18.10中更新,并且在18.04 LTS中需要快速处理的安全更新。当11.0.1准备好时,它将会出现在18.04 LTS中,但这是一个需要仔细协调的重大变化。
2019-02-26:此错误已在错误1814133中处理,因此我将其标记为重复。进一步讨论应该在那个错误上进行,而不是在这里。
已经开放了一个新的错误报告来跟踪所有需要进行的更改,而且有很多 - 大约有140个。以下是错误报告的摘录:

这个转换是从openjdk-10到openjdk-11的安全更新。这引入了运行时和FTBFS问题,需要将多个软件包回退到安全存储区。

这些软件包正在https://launchpad.net/~openjdk-11-transition团队的PPA上构建。PPA仅依赖于安全存储区,并按阶段分离。

基金会和安全团队之间达成的协议是,PPA中的软件包将被二进制复制到bionic-proposed,检查迁移问题,并且 - 没有待处理的问题 - 复制到bionic-security。

[...]

一些软件包在Cosmic中可能也需要更新,但作为例外,在Bionic转换解决后才会进行。

另外一个Ubuntu开发者Tiago Stürmer Daitx注意到
我们计划更新受此转换影响的Java应用程序。
更具体地说,任何无法在openjdk-11下正确运行的软件包都将进行调查,并有可能进行更新。更新并不一定意味着我们会使用最新版本:我们可能只是应用或回溯一些改动,使其能够在openjdk-11下正常工作。
目前还没有预计完成时间。过渡团队维护的各种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)

3自从Java 11发布以来已经过去了2天,这些软件包仍然提供Java 10.0.2版本。我想知道为什么会有这样长时间的延迟? - Sina Madani
6只有两天?这个延迟也太大了吧?O.o 这是一个Canonical承诺多年支持的包裹。我相信你可以利用你的Canonical订阅来要求更快的发布。 - muru
1在提前数月已知发布日期的情况下,这实在是令人惊讶。 - Sina Madani
5知道发布日期并不能缩短QA所需的时间。如果你着急的话,PPA已经更新了:https://launchpad.net/~openjdk-r/+archive/ubuntu/ppa 我预计这些软件包很快会进入proposed,然后再到更新中心。 - muru
10我相信这个评论,但是我不明白他们有效地将一个 JDK 版本错误分类是对的。这太令人困惑了,我要说,有点不诚实。只需为我们提供版本选择,我们自己来执行 update-alternatives 即可。谢谢 @muru 的回答。 - Daniel Hinojosa
3@DanielHinojosa 我同意。他们应该只使用“default-jdk”包,并随时间更新,而不是误导人们关于版本的问题。 - Sina Madani
4@SinaMadani 问题是,根据目前的存储库工作方式,这导致了两个选择:一个由Canonical维护5年的openjdk-10软件包,或者一个成为openjdk-11过渡软件包的openjdk-10软件包。第一种选择不切实际,而第二种选择实际上就是现在正在进行的,但更加方便。 - muru
10@muru 现在已经快一个月了,还没有大的延迟吗? - 9ilsdx 9rvj 0lo
14@9ilsdx9rvj0lo 有人提交了一个错误报告,请留意一下:https://bugs.launchpad.net/ubuntu/+source/openjdk-lts/+bug/1796027 - muru
3这真是一个非常愚蠢的决定 - 我们现在已经是2019年2月了,但软件包仍然只提供Java 10。Java 11带来了重大的改变,可能会破坏一些东西,而他们却不敢更新。请让这成为一个教训:永远不要对主要版本号撒谎。 - Brad Richards
1你所提及的错误被标记为重复(好吧,准确地说是无效,因为有人出问题了将其标记为重复 - 但是评论已经澄清了)。你能否把链接改成https://bugs.launchpad.net/ubuntu/+source/openjdk-lts/+bug/1814133? - Line

看看上面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)

回答了一个不同的问题,但因为你很好地提到了muru的答案并且它很有用,所以我会采纳它。+1;-) 欢迎来到AskUbuntu!:-) - tudor -Reinstate Monica-
谢谢,那么我是不是应该先提出新的“如何解决这个问题?”然后再回答它? - Karl
从技术上讲,是的。你的回答是对问题“如何安装最新的(非存储库)Java版本?”的回答,而我的问题更多涉及发行政策和随之而来的混乱。此外,你还可以为那个问题获得问题分数和答案分数,并且搜索起来会更容易。然后将那个问题与这个问题链接为“相关”。 :-) - tudor -Reinstate Monica-
下次再见 :-) 干杯 - Karl
一个如此受欢迎的答案,它成为了一篇DevZone文章:https://dzone.com/articles/installing-openjdk-11-on-ubuntu-1804-for-real 等等。反过来翻译。 - Kieveli
酷!知识的宇宙汇聚在一起。 - Karl