如何在14.04 LTS上安装OpenJDK 8?

根据http://openjdk.java.net/projects/jdk8/,Java 8现在已经可用,但是http://openjdk.java.net/install/还没有提到如何在Ubuntu 14.04长期支持版上安装OpenJDK 8(而不是Oracle Java)。 (对于14.10及更高版本,只需运行apt-get install openjdk-8-jdk

这可以在什么时候以及如何完成?

(2017-08-08:非常简短的答案是:截至2017-08-08,Ubuntu 14.04的官方存储库中尚未正式提供OpenJDK 8作为APT软件包。请参阅此答案的完整摘要-更新于2021-06-29)

注意:目前我们将使用Oracle Java-对我来说,最佳解决方案是从Ubuntu存储库中获取OpenJDK,直到Oracle Java可以直接且轻松地从Ubuntu存储库中获取。



1你需要自己编译它。以下是具体步骤:https://github.com/hgomez/obuildfactory/wiki/How-to-build-and-package-OpenJDK-8-on-Linux 请将文件名更改为与版本8匹配;-) - Rinzwind
2Azul开始提供名为“Zulu”的OpenJDK构建版本,用户可以下载、解压并自动使用。(他们通过支持服务来获取收入)。http://www.azulsystems.com/products/zulu/downloads - Thorbjørn Ravn Andersen
1值得注意的是,apt-fast适用于trusty版本的同一个ppa,即ppa:saiarcot895/myppa,它有一个可用的openjdk-8版本。 耸肩 - ThorSummoner
随着时间的推移,似乎最简单的解决方案就是在可用时升级到16.04 LTS。 - Thorbjørn Ravn Andersen
12个回答

编辑注:这个答案已经过时了,因为列出的PPA不再可用。
你可以为此做以下事情;
最终更新
JDK
sudo apt-get install openjdk-8-jdk

JRE
sudo apt-get install openjdk-8-jre

旧更新

我找到了两个仓库,但我不推荐使用。

  • OpenJDK构建(所有架构)

      ppa:openjdk-r/ppa
    
  • 适用于trusty的OpenJDK 8后移版本

      ppa:jochenkemnade/openjdk-8
    

原始信息

如果你真的想使用OpenJDK,你必须从源代码编译。目前还没有任何针对OpenJDK的PPA。

已经在以下地址提出了请求: https://bugs.launchpad.net/ubuntu/+bug/1297065

我建议你使用Webup8 Oracle Java8 Installer

注意:WebUpd8团队的PPA已于2019年4月16日停止使用。因此,该PPA不再包含任何Java文件。更多信息请参阅Launchpad上的PPA页面。因此,下面的方法不再有效存在,仅因历史原因而保留。

sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
sudo apt-get install oracle-java8-installer

自动设置Java 8环境变量
sudo apt-get install oracle-java8-set-default

检查一下
java -version

所以你必须等待才能使用OpenJDK8。

2为什么这种方法比直接在 Oracle 网站上下载源码安装 Oracle 8 更受推荐? - JohnMerlino
8@JohnMerlino 我猜测PPA允许在新版本发布时自动更新。 - Thorbjørn Ravn Andersen
4JohnMerlino Oracle的Java运行时环境不是免费和开源软件!你有没有考虑到很多人拒绝使用专有软件? - John Scott
1@JohnMerlino 你说的是获取资源并编译它们,还是直接去源头?这两者有区别。 - Thorbjørn Ravn Andersen
7openjdk-8现在已经在Utopic中可用。https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1341628已经提出要将其回溯到14.04,因为它是LTS版本。 - Thorbjørn Ravn Andersen
3对于那些没有add-apt-repository命令的用户,请执行以下操作:$ sudo apt-get install software-properties-common python-software-properties - Reeebuuk
1在添加apt源时,我遇到了错误:'softwareproperties.ppa.PPAException:'读取https://launchpad.net/api/1.0/~webupd8team时出错:[Errno 111] Connection refused'”。有什么帮助吗? - mtk
2已经过去一年多了,OpenJDK在U-14.04上仍然存在问题,并且还没有解决方案。如果要安装Oracle Java 8,请点赞:sudo add-apt-repository ppa:webupd8team/java -y... - AlikElzin-kilaka
1@muhasturk:你能解释一下为什么你不建议使用那些PPA吗? - Ztyx
57为什么要进行新的编辑?似乎它还没有出现在14.04的软件库中,而且sudo apt-get install openjdk-8-jdk对我来说至少不起作用。 - xji
17截至2016年1月11日,非官方的Ubuntu PPA仍然是必需的,因为OpenJDK 8尚未在后备库中推出。尽管其他人可能认为这是对我的问题的回答,但我并不这样认为。 - Thorbjørn Ravn Andersen
2我仍然无法安装它:无法找到软件包openjdk-8-jdk - Vitaly Zdanevich
9这个答案非常误导,因为它不完整,它说不推荐提到的PPA,但没有它就无法正常工作。 - Reinier Post
您需要添加 openjdk-r PPA。请参照此答案清晰定义的步骤,http://askubuntu.com/a/666481/216492 - Air
1不起作用 E:软件包'openjdk-8-jdk'没有安装候选 - Naive
最后更新部分是错误的。opendk-8-jdk不在后备库中。然而,openjdk-r/ppa确实可行。 - Edgar Klerks
2014年提出了将Java 8回溯移植的请求,但至今尚未实现。请跟踪此问题(或此问题)以获取最新消息。 - Franklin Yu
1因为“最终更新”在14.04版本中无法正常工作,除非使用某种额外的ppa,所以被投下了反对票。 - Simon Feltman
不再适用于我。而且它曾经是可以正常运行的。这些软件包现在已损坏,并在我尝试安装时出现404错误。 - sudo
@JohnScott 如果你能一步安装OpenJDK而不会遇到问题,可能会有更多人使用它。我认为大多数用户并不真的在意,只是需要它作为安装其他东西的要求。 - sudo

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac

8这个仓库的内容已经过时了;截至今天,最新的openjdk 1.8版本是66。而这个仓库中可用的版本是45。 - mattm
无法获取 http://ppa.launchpad.net/openjdk-r/ppa/ubuntu/pool/main/o/openjdk-8/openjdk-8-jdk-headless_8u91-b14-0ubuntu4~14.04_amd64.deb 502 apt-cacher: libcurl错误:从对等方接收数据时失败 - Rajesh Hatwar
1这些是正确的最小步骤。第4和第5步是可选的,可能不需要。 - Air
无法在Ubuntu 14.04上工作 E: 包 'openjdk-8-jdk' 没有可安装的候选项 - Naive
1这对我在升级Jenkins时起了作用(较新的版本要求Java8,我的系统只安装了Java7)。需要注意的是,第四行对使Jenkins正常运行至关重要;在运行它之前,我一直收到Jenkins requires Java8 or later, but you are running 1.7.0_121-b00 from /usr/lib/jvm/java-7-openjdk-amd64/jre的错误消息。给你点赞...如果可以的话,我会给你更多的。 - Doktor J
也适用于Windows Linux子系统。 - koppor
在Ubuntu/Trusty64 Vagrant虚拟机上对我来说没问题。 - Michael Martinez
add-apt-repository: 找不到命令 - Damir Olejar
截至今天,它适用于Ubuntu 14.04操作系统,JDK版本为1.8.0u222。 - digz6666
非常有帮助,谢谢你的分享。 - Truong

OpenJDK 8于2014年3月发布。截至本问题提问时,对于任何Ubuntu版本,官方Ubuntu软件源中都没有OpenJDK 8的软件包。正如JDK 8项目页面所说的那样,它们“将很快可用”,“很快”这个词有待进一步定义。

首先,OpenJDK 8软件包将出现在Ubuntu开发版本中。可能会在14.10开发周期内实现,但据我所知,目前还没有确定的时间表。已构建了一些预览软件包,并可供测试,详见debian-java和Ubuntu openjdk邮件列表上的公告。随后,这些软件包将上传到Debian和Ubuntu的开发软件源中。

一旦OpenJDK 8在Ubuntu的开发版本中推出,那么可能有可能请求将其后移至14.04版本。请注意,它将永远不会在主要的"trusty"软件仓库中提供,但如果您使用"trusty-backports",则有可能从那里安装它。了解在Ubuntu中请求后移的过程,请点击这里

4我尝试回答你的问题“如何和何时”,并考虑到你所要求的限制:必须来自官方软件仓库,必须是OpenJDK,并且必须是14.04 LTS版本。 - Michael Miller
30现在是2016年2月,但是Ubuntu 14.04 LTS上还没有Java 8可用。这真令人失望。 - Bhavin Doshi
2现在是2016年4月,还没有Java 8... - Stephan Henningsen
3Ubuntu 16.04将于2016年4月发布,它将包含OpenJDK 8 - Michael Miller
8这是2016年9月,Ubuntu 14.04 LTS将一直得到支持,直到2019年...而且许多地方由于更大规模的变化(如systemd),需要很长时间才能采用16.04,所以令人失望的是在14.04上无法轻松通过apt安装Java 8 :( - geerlingguy
@geerlingguy,请参考问题跟踪项,以添加将openjdk-8回溯到14.04 - Michael Miller
@MikeMiller - 已经给那个bug点了+1。 - geerlingguy
1现在是2016年10月,openjdk-r PPA中的14.04 OpenJDK 8软件包自4月20日以来没有更新了...但它仍然可以正常使用。 - Reinier Post

注意 - 这只适用于14.10或更高版本:

虽然晚了一年,但今天使用apt-get可以正常工作。

安装JDK:

$ sudo apt-get install openjdk-8-jdk

安装JRE的步骤如下:
$ sudo apt-get install openjdk-8-jre

如何设置默认的JDK

最快的方式

运行$ sudo update-alternatives --config java,并输入您选择的JDK的数字。

第二种方式

列出可用的JDK:

$ update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64

现在,复制并粘贴Open JDK 8的位置以匹配下面的命令:
$ sudo update-java-alternatives -s /usr/lib/jvm/java-1.8.0-openjdk-amd64

3我仍然只看到JDK 6和7,在我的Linux 14.04上没有openjdk-8-jdk,即使执行了sudo apt-get update。你是否添加了特殊的软件源?我已经启用了trusty-backports。 - akauppi
2我认为你正在使用14.10或15.04版本,不是吗? - akauppi
1我无法在14.04 LTS上复现。请确认这是您的版本。 - Thorbjørn Ravn Andersen
1@akauppi 你说得对!!我正在使用14.10版本。对不起给你带来的不便,我应该删除我的回答吗? - caraca
1我不会希望它被移除 - 对于一些人来说,使用14.10而不是14.04可能是一个完全可行的替代方案。 - akauppi

以下是我在Ubuntu 14.04 LTS上从头开始设置Oracle Java 7和Java 8(注意:不是OpenJDK)所使用的方法:
apt-get -y -q update
apt-get -y -q upgrade
apt-get -y -q install software-properties-common htop
add-apt-repository ppa:webupd8team/java
apt-get -y -q update
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
apt-get -y -q install oracle-java8-installer
apt-get -y -q install oracle-java7-installer
update-java-alternatives -s java-8-oracle

这是一个无人值守的脚本,适用于Vagrant provision块中的引入;我有一个更详细的要点:https://gist.github.com/tinkerware/cf0c47bb69bf42c2d740 编辑:这将自动接受Oracle JDK的许可证,请确保在运行之前您已经同意了这一点。

1看起来不错。但是缺少了获取root访问权限的部分。还是个不错的回答。 - MadMike
1对的,我在使用Vagrant时,它会设置vagrant用户并允许无需密码的sudo操作。 - Cagatay
5这是_Oracle_ Java,而不是问题所涉及的_OpenJDK_ Java。另外请注意,echo行绕过了安装程序中的许可接受问题。 - Thorbjørn Ravn Andersen
3@ThorbjørnRavnAndersen 是的,我注意到问题是关于OpenJDK的;我特别提到我的方法是用于安装Oracle Java的。你可能会争辩说这与问题无关,但我认为指出一个仍然可以在14.04 LTS上运行Java 7/8的替代方法是有价值的。“规避”许可接受问题是一个有趣的词选择;我会建议在运行脚本之前阅读Oracle许可协议,该脚本会自动在安装过程中进行许可接受。 - Cagatay
3谢谢 @Cagatay!! 这个答案对我非常有帮助,我正在寻找使用Vagrant安装Java 8。 - Sotsir
@Cagatay 我认为大多数人只会复制粘贴这个并查看它是否有效。在这种情况下,没有人甚至会知道他们正在默默地接受许可证。 - Thorbjørn Ravn Andersen

截至2017年8月8日,我发现这个问题及其答案已经变得有点难以理解,所以我在这个答案中总结了一些发现。
非常简短的回答是,截至2017年8月8日,OpenJDK 8在Ubuntu 14.04上尚未正式提供。 然而,还有几个可选方案:
  • 升级到较新的Ubuntu版本。OpenJDK 8可从14.10及以后版本获取。(OpenJDK 9可从16.04 LTS及以后版本获取,OpenJDK 11可从18.04 LTS及以后版本获取)。除非您在扩展支持期内,这是2021年最好的方法。
  • http://www.azul.com/downloads/zulu/zulu-linux/下载Azul认证的OpenJDK 8版本 - 它们提供64位和32位版本。
  • http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html手动下载并安装Oracle Java(不是OpenJDK),以.tar.gz文件形式,只需解压并接受许可证后,才能将bin目录添加到$PATH变量中。您还可以选择使用第三方PPA。重要提示:2019年许可证已更改为更加限制性的授权,您可能需要成为付费客户才能在生产中使用Oracle Java!
  • 使用第三方PPA下载OpenJDK 8。这越来越不是一个好主意,因为它们往往会过时或消失,通常都是由个人志愿者创建的。
  • 自行编译源代码并安装。
(请随意添加其他提供商)
有关详细信息,请参阅其他答案。
个人建议将Ubuntu升级到18.04 LTS或更新版本,如果不可能的话,可以下载Azul构建。AdoptOpenJDK/Eclipse Adoptium只适用于16.04及更高版本的x64系统。
注意:如果您仍然需要将OpenJDK 8回溯到14.04版本,请登录并在顶部点击“Does it affect you”来为此错误投票:https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1368094

注意自2016年4月22日起,Vivid的软件包已被移除。在packages.ubuntu.com上的新闻中提到:“反映xenial发布,添加yakkety,删除vivid”。这个答案的解决方法很聪明,但在当前情况下不再适用。截至2017年1月6日,在packages.ubuntu.com/trusty-backports/java上还没有针对trusty的java 8的后备版本。请根据实际情况进行编辑。


请参考Android官方网站上的答案。

https://source.android.com/source/initializing.html

在Ubuntu 14.04上没有可用的支持OpenJDK 8的软件包。Ubuntu 15.04的OpenJDK 8软件包已经成功地在Ubuntu 14.04上使用过。根据以下说明,发现更新的软件包版本(例如15.10、16.04)在14.04上无法工作。

http://packages.ubuntu.com/vivid/openjdk-8-jdk下载适合您架构的.deb软件包:
openjdk-8-jre-headless
openjdk-8-jre
openjdk-8-jdk

请记住,您可以使用以下命令获取您机器的架构:

$ uname -m    

x86_64代表64位(amd64)的Linux内核架构,而i386/i486/i586/i686代表32位(i386)系统。
可选择使用在http://packages.ubuntu.com/vivid/openjdk-8-jdk上找到的信息来确认下载文件的校验和。
例如,可以使用sha256sum工具进行校验:
$ sha256sum {package file}    

安装软件包:
$ sudo apt-get update    

运行dpkg命令来安装你下载的每个.deb文件。由于缺少依赖关系,可能会出现错误提示。
$ sudo dpkg -i {downloaded.deb file}    

修复缺少的依赖项:
$ sudo apt-get -f install    

我刚刚在这里投了票here,现在我们有733个人关心将openjdk-8回溯到ubuntu-14.04。
我发现this PPA repository非常更新。
希望如此!?
对我来说很有效。我成功地在ubuntu-14.04上安装了openjdk-8-jdk,使用以下命令:
sudo add-apt-repository ppa:jonathonf/openjdk sudo apt-get update sudo apt-get install openjdk-8-jdk
这是我的java -version输出:
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-1~14.04.york0-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

这是我的uname -a输出:
Linux mars1 4.4.0-75-generic #96~14.04.1-Ubuntu SMP Thu Apr 20 11:06:30 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

这是我的 lsb_release -a 输出:
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.5 LTS
Release:        14.04
Codename:       trusty

我的虚拟主机服务器提供商告诉我,他们只支持Ubuntu-14.04,并且我猜他们打算一直这样继续到2019年!所以请告诉我,如果你知道在Ubuntu-14.04上有更好的方法来安装openjdk-8,请告诉我。
谢谢!

我建议使用Azul Zulu。http://www.azul.com/downloads/zulu/ - Thorbjørn Ravn Andersen
我还需要运行以下命令才能使其正常工作:sudo update-java-alternatives --jre --set java-1.8.0-openjdk-amd64sudo update-java-alternatives --jre-headless --set java-1.8.0-openjdk-amd64 - champost

Nix软件包管理器还维护着Ubuntu上OpenJDK 8的二进制包,这意味着您可以在不到五分钟的时间内获得一个可用的Java 8编译器(当然,需要快速的互联网连接)。
步骤如下:
1. 安装Nix软件包管理器(https://www.domenkozar.com/2014/01/02/getting-started-with-nix-package-manager/):`$ bash <(curl https://nixos.org/nix/install)`
2. 运行安装结束时Nix告诉您的shell一行命令:`$ . ~/.nix-profile/etc/profile.d/nix.sh`
3. 安装OpenJDK Nix软件包:`$ nix-env -i openjdk`
4. 检查`javac`版本:`$ javac -version`
就这样。哦,还有你会想要确保将第2步的一行代码放入你的~/.bashrc中。这将告诉Nix正确链接你安装的软件包(因为它将实际文件保存在非标准目录中)。

1好奇心驱使 - 除了apt-get,你为什么要一个额外的软件包管理器呢? - Thorbjørn Ravn Andersen
2@ThorbjørnRavnAndersen - 具体的原因是为了快速获取带来最小麻烦的OpenJDK 8,而一般的原因是Nix相对于apt-get和其他旧版软件包管理器来说是一项革命性的改进。 - Yawar
我是在一般情况下提问,而不是针对OpenJDK。引入一个新的软件包管理器必须有非常重要的理由,以超越不使用现有的生态系统,而这一点我很难理解。 - Thorbjørn Ravn Andersen
1@ThorbjørnRavnAndersen - 推荐Nix在一般情况下有非常好的理由。正如我所提到的,它是一种革命性的改进。就像git相对于svn一样。请访问http://www.infoq.com/articles/configuration-management-with-nix了解更多信息。 - Yawar

我从官方的Debian软件仓库获取OpenJDK 8,而不是一些随机的PPA。以下是我的操作步骤:
sudo apt-get install debian-keyring debian-archive-keyring

创建/etc/apt/sources.list.d/debian-jessie-backports.list文件:

deb http://<httpredir>.debian.org/debian/ jessie-backports main

将更改为附近镜像的前缀(请参见https://www.debian.org/mirror/list
创建/etc/apt/preferences.d/debian-jessie-backports文件:
Package: *
Pin: release o=Debian,a=jessie-backports
Pin-Priority: -200

然后最后进行安装:
sudo apt-get update
sudo apt-get -t jessie-backports install openjdk-8-jdk

这个答案对我来说不起作用。openjdk-8-jdk需要openjdk-8-jre,而openjdk-8-jre又需要libjpeg62-turbo。根据apt的说法,后者是"无法安装",或者更详细地说是"不可用,但被另一个软件包引用。这可能意味着该软件包丢失、已过时,或者只能从其他来源获取" -- 因此不是我所拥有的软件源中的内容。追寻变得太广泛而不明智。 - XavierStuvw