如何安装Sun/Oracle的专有Java JDK 6/7/8或JRE?

我想安装Oracle的JRE,并在发布时使用软件更新器升级到最新版本。是否有由Canonical或Oracle提供的Ubuntu软件包?
在发布Java 7之前,我按照这个方法安装了Java 6。
但是对于Java 7来说,这种方法不起作用。没有sun-java7-xxx软件包。你如何安装Java 7?

2我写了一篇博客文章,详细解释了如何在Natty上安装Java 7,包括OpenJDK和Sun的安装方法:http://brunoreis.com/tech/installing-java-ubuntu-natty/ OpenJDK是通过Damien Lecan提供的PPA进行安装,而Sun的则需要手动安装。据我所知,这是目前唯一在步骤和解释方面都正确的指南。如果您发现任何问题,请在那里留言,我会尽力修复。祝您好运。 - Bruno Reis
12我还想指出,使用OpenJDK不仅是一个可行的选择,而且也是现在的参考实现 - nickguletskii
12openJdk不受银行小程序或其他软件的支持。例如:Aptana Studio。 - Elzo Valugi
4这个链接似乎没有描述一种方法? - rogerdpack
@ElzoValugi 我认为你需要使用冰茶来使用银行应用程序。它基于OpenJDK。 - GKFX
1@GKFX 不,对于这家特定的银行来说,IcedTea无法使用,而且该银行只支持Oracle的Java。与此同时,他们放弃了使用Java,我认为这是一个明智的决定。 - Elzo Valugi
你为什么从来没有接受过答案? - user364819
可能是如何安装Java?的重复问题。 - user364819
你也可以使用https://sdkman.io/。我在这里发布了一个完整的答案:https://stackoverflow.com/questions/49507160/how-to-install-jdk-10-under-ubuntu/53083341#53083341 - lealceldeiro
这个页面已经过时了。Oracle Java 6/7/9 已经到达了生命周期的尽头。Java 8 无法从 webupd8team PPA 安装,因为 Oracle 在2019年4月更改了许可证。现在你只能使用下载 *.tar.gz 归档文件并按照下面的安装方法进行安装。 - Hedley Finger
28个回答

关于如何安装JRE 7,有一个类似的答案

安装Java JDK

手动方式

  • 下载32位或64位的Linux "压缩二进制文件" - 它具有".tar.gz"文件扩展名。

  • 解压缩它

    tar -xvf jdk-8-linux-i586.tar.gz (32位)

    tar -xvf jdk-8-linux-x64.tar.gz (64位)

    JDK 8软件包被提取到./jdk1.8.0目录中。注意:仔细检查此文件夹名称,因为Oracle似乎会在每次更新时更改它。

  • 现在将JDK 8目录移动到/usr/lib

    sudo mkdir -p /usr/lib/jvm
    sudo mv ./jdk1.8.0 /usr/lib/jvm/
    
  • 现在运行

    sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0/bin/java" 1
    sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0/bin/javac" 1
    sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.8.0/bin/javaws" 1
    

    这将给Oracle JDK分配优先级为1,这意味着安装其他JDK将替换它作为默认值。如果您希望Oracle JDK保持默认设置,请确保使用更高的优先级。

  • 更正可执行文件的文件所有权和权限:

    sudo chmod a+x /usr/bin/java
    sudo chmod a+x /usr/bin/javac
    sudo chmod a+x /usr/bin/javaws
    sudo chown -R root:root /usr/lib/jvm/jdk1.8.0
    

    注意:请记住 - Java JDK还有许多其他类似安装的可执行文件。 javajavacjavaws可能是最常需要的。此答案列表列出了其他可用的可执行文件。

  • 运行

    sudo update-alternatives --config java
    

    您将看到类似于下面的输出 - 在此列表中选择jdk1.8.0的编号 - 例如3(除非您从未在计算机上安装过Java,否则将显示一句话说"没有要配置的内容"):

    $ 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-7-openjdk-amd64/jre/bin/java   1071      auto mode
      1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
    * 2            /usr/lib/jvm/jdk1.7.0/bin/java                   1         manual mode
      3            /usr/lib/jvm/jdk1.8.0/bin/java                   1         manual mode
    
    Press enter to keep the current choice[*], or type selection number: 3
    update-alternatives: using /usr/lib/jvm/jdk1.8.0/bin/java to provide /usr/bin/java (java) in manual mode
    

    重复上述步骤:

    sudo update-alternatives --config javac
    sudo update-alternatives --config javaws
    

NetBeans 用户请注意!

您需要将新的 JDK 设置为默认,以编辑配置文件。


如果您想启用Mozilla Firefox插件:
32 bit:
ln -s /usr/lib/jvm/jdk1.8.0/jre/lib/i386/libnpjp2.so ~/.mozilla/plugins/

64 bit:
ln -s /usr/lib/jvm/jdk1.8.0/jre/lib/amd64/libnpjp2.so ~/.mozilla/plugins/

注意:您可以将插件(libnpjp2.so)链接到/usr/lib/firefox/plugins/以进行系统范围的安装(从15.04开始为/usr/lib/firefox-addons/plugins)。对于Ubuntu 13.10,插件目录的路径是/usr/lib/firefox/browser/plugins/
根据您的配置,您可能需要更新/etc/apparmor.d/abstractions/ubuntu-browsers.d/java中Firefox(或其他浏览器)的apparmor配置文件:
# Replace the two lines:
#  /usr/lib/jvm/java-*-sun-1.*/jre/bin/java{,_vm} cx -> browser_java,
#  /usr/lib/jvm/java-*-sun-1.*/jre/lib/*/libnp*.so cx -> browser_java,
# with those (or adapt to your new jdk folder name)
/usr/lib/jvm/jdk*/jre/bin/java{,_vm} cx -> browser_java,
/usr/lib/jvm/jdk*/jre/lib/*/libnp*.so cx -> browser_java,

然后重新启动apparmor:
sudo /etc/init.d/apparmor restart

简单的方法(已过时)

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

安装JDK 7最简单的方法是使用Web Up8 Oracle Java OOS。然而,据信该PPA有时会过时。还要注意使用PPA的危险性

这将安装JDK 7(包括Java JDK、JRE和Java浏览器插件):

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
# or if you want JDK 8:
# sudo apt-get install oracle-java8-installer
# these commands install Oracle JDK7/8 and set them as default VMs automatically:
# sudo apt-get install oracle-java7-set-default
# sudo apt-get install oracle-java8-set-default

来源

注意:在有人大喊这违反了Oracle的再发布许可之前——PPA实际上没有Java在个人存储库中。相反,PPA直接从Oracle下载并安装。

脚本方式

如果你在一个全新安装的Ubuntu上没有之前的Java安装,这个脚本将自动完成上述过程,如果你不想在终端中输入所有内容的话。记住,你仍然需要从Oracle的网站下载Java——Oracle的链接不适合使用wget命令。

在使用此脚本之前,请确保它与您下载的.tar.gz文件扩展名位于同一目录中,并且该目录中没有以jdk-7开头的文件。如果有,请暂时将其移出该文件夹。请记得将脚本设为可执行(chmod +x <脚本文件>)。

#!/bin/sh

tar -xvf jdk-7*
sudo mkdir /usr/lib/jvm
sudo mv ./jdk1.7* /usr/lib/jvm/jdk1.7.0
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0/bin/javaws" 1
sudo chmod a+x /usr/bin/java
sudo chmod a+x /usr/bin/javac
sudo chmod a+x /usr/bin/javaws

如果你想为Firefox安装插件,那么请将以下内容添加到脚本的末尾:
mkdir ~/.mozilla/plugins
ln -s /usr/lib/jvm/jdk1.7.0/jre/lib/amd64/libnpjp2.so ~/.mozilla/plugins/
sudo /etc/init.d/apparmor restart

检查安装是否成功

您可以使用以下命令检查安装是否成功:

java -version

你应该看到类似的东西
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

你可以通过使用官方Oracle网站来检查JRE Mozilla插件是否安装成功。
对于Java 6:如何安装Oracle JDK 6?

8需要做完全相同的过程来更新吗? - Lucio
我注意到java-common软件包中的'update-java-alternatives'命令在使用Oracle JDK时无法正常工作。有人知道为什么吗? - djangofan
6这对我来说非常成功,在Ubuntu 12.04 LTS 上安装32位JDK。唯一的问题是,当我尝试运行java -version时,出现了bash: /usr/bin/java: No such file or directory的错误。通过执行apt-get install libc6-i386,解决了这个问题。 - gregmac
关于 man ($JAVA_HOME/man) 页面怎么样?你需要像 @BigWhale 的回答中所说的那样 --slave 它们。此外,位于 lib ($JAVA_HOME/lib) 中的 jar 文件是否也是必需的?你如何正确安装它们呢? - DavidGamba
谢谢教程。要在Chromium(32位)中使其正常工作,除了Firefox之外,还需要在终端中运行以下命令:sudo ln -s /usr/lib/jvm/jdk1.7.0/jre/lib/i386/libnpjp2.so /usr/lib/chromium-browser/plugins/ 要在Chrome(32位)中使其正常工作,请执行以下操作:sudo mkdir /opt/google/chrome/plugins && cd /opt/google/chrome/plugins && sudo ln -s /usr/lib/jvm/jdk1.7.0/jre/lib/i386/libnpjp2.so /opt/google/chrome/plugins/ 在某些基于Ubuntu的发行版中,如果您想让Flash在Firefox中正常工作,只需将该文件添加到/usr/lib/firefox-addons/plugins目录中。 - pablofiumara
+1 对于(等等)“Oracle的链接不适合wget” - 我花了很多时间才能获取这些文件(无头服务器,不得不安装GUI和浏览器才能访问它们)。 - Mathieu Dhondt
4我建议在这种情况下使用/usr/local/*来替代/usr/*进行任何手动安装。这样,您手动安装的内容就不会与由软件包管理器管理的内容混杂在一起,使手动安装更加可控。 - Flint
4我强烈推荐手动解决这个问题。这是最可靠的方法。由于Oracle Java已经获得许可,PPA不再起作用。而且上面的脚本假设您正在使用编译器和运行时环境,并且版本已经过时。 - JohnMerlino
1如何安装manpage? - Tim
你也可以使用http://packages.ubuntu.com/trusty/java-package。 - GKFX
1难道不是/usr/lib用于软件包分发吗?如果您使用源代码,我认为应该放在/usr/local中。也许/usr/local/java8是一个不错的位置。 - Donato
如何以手动方式安装jdk7和jdk8? - Shikloshi
在使用终端时,请使用正确的文件名,例如在使用Java JDK版本8更新66时,使用'sudo mv ./jdk1.8.0_66 /usr/lib/jvm/'。 - vivi
我在运行sudo update-alternatives --install "/usr/bin/java" "java" "usr/lib/jvm/jdk1.8.0_102/bin/java" 1之后,遇到了这个错误update-alternatives: error: alternative path is not absolute as it should be: usr/lib/jvm/jdk1.8.0_102/bin/java。请问我做错了什么?谢谢。 - Onix
1我尝试了简单的方法,但是出现了以下错误: E: 软件包 'oracle-java8-installer' 没有可安装的候选项。 - Ahmed Mostafa

关于如何安装JDK 8,有一个类似的答案

安装JRE

下载32位或64位的Linux "压缩二进制文件" - 它的文件扩展名是".tar.gz",然后解压缩它。

tar -xvf jre-7-linux-i586.tar.gz

JRE 7软件包已解压到./jre1.7.0目录。现在将JRE 7目录移动到/usr/lib
sudo mv ./jre1.7.0* /usr/lib/jvm/jre1.7.0

运行以下命令以获取当前安装的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-openjdk/jre/bin/java 1061 auto mode
1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 manual mode
2 /usr/lib/jvm/java-6-sun/jre/bin/java 63 manual mode

Press enter to keep the current choice[*], or type selection number:

记住最后一个数字,按回车键退出此工具,例如在这个例子中记住数字2
如果只显示一个备选项,则记住数字0
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jre1.7.0/bin/java 3

这将把您的新JRE 7安装添加到备选列表中,即使用记住的数字加1,例如上面的示例中为3。现在配置Java以使用Oracle Java JRE:
sudo update-alternatives --config java

您将看到类似下面的输出 - 选择 jre1.7.0 的数量,即 3

There are 3 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
————————————————————
* 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 auto mode
1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 manual mode
2 /usr/lib/jvm/java-6-sun/jre/bin/java 63 manual mode
3 /usr/lib/jvm/jre1.7.0/jre/bin/java 3 manual mode

Press enter to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/lib/jvm/jre1.7.0/jre/bin/java to provide /usr/bin/java (java) in manual mode.

请注意:如果之前没有安装Java,则新的JRE将成为默认版本,您将不会看到上述提示。
检查您新安装的JRE 7版本:
java -version

应该产生
java version “1.7.0”
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)

安装Firefox/Chrome插件

在终端中:

mkdir ~/.mozilla/plugins

如果已安装,请删除IcedTea插件。
sudo apt-get remove icedtea6-plugin

删除先前版本的Java插件(可能存在,也可能不存在):
rm ~/.mozilla/plugins/libnpjp2.so

现在,您可以通过创建符号链接(告诉Firefox插件所在的位置)来安装插件。对于32位Java,请使用

ln -s /usr/lib/jvm/jre1.7.0/lib/i386/libnpjp2.so ~/.mozilla/plugins/

使用64位的Java
ln -s /usr/lib/jvm/jre1.7.0/lib/amd64/libnpjp2.so ~/.mozilla/plugins/

通过使用官方Oracle网站确认JRE已成功安装。


10运行sudo update-alternatives --config java命令后,我得到以下输出:在java链接组中只有一个可选项:/usr/lib/jvm/java-6-openjdk/jre/bin/java 无需配置。我做错了什么? - Shoan
7非常好的回答,谢谢!不知道为什么Oracle不能花时间来制作这个的包。 - bbqchickenrobot
1@Shoan,如果是这样的话,请执行以下步骤:“如果只显示一个备选项,则记住数字0”。 - henrique
3谢谢您的答复,对于一个 Linux 新手来说,Oracle 的说明太糟糕了,这让事情变得容易多了! - David Barker
谢谢!现在我终于可以使用Sun JVM了!编辑:糟糕,这在我的64位系统上破坏了Minecraft。(奇怪的是,考虑到他们明确要求使用Sun的JVM。)启动器正常打开,但当我尝试启动时,出现黑屏,即使我删除了~/.minecraft/bin/文件夹并进行了更新。从终端运行时,它给我一些关于错误ELF类型的无意义信息,并且可能是架构不匹配。(Oracle网站上的官方Java验证器显示一切正常,不过...) - JamesTheAwesomeDude
对于那些没有安装任何旧版本Java的人来说,值得注意的是,您不需要执行命令sudo update-alternatives --config java(两次都不需要)。如果您执行了该命令,也不会造成问题,只会给出一个警告,说明没有或只有一个可选项,并且无需进行配置。 - thecoshman
我们需要为更新执行相同的步骤吗? - sterz
1虽然这个方法是可行的,但apt-get不知道你已经安装了Java。因此,尝试安装ant、maven等工具仍然会希望安装OpenJDK。相反,像http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html这样的方法对我来说非常好用! - Brad
1如果update-alternatives --config java命令返回update-alternatives: error: no alternatives for java,那该怎么办呢? - Mads Skjern
我真的很怀疑后面的指示对Chrome有帮助,也就是说Chrome真的会读取Firefox的设置吗? - Mads Skjern
你能想到在生产环境的Web服务器上需要Firefox/Chrome插件来支持JRE吗?另外,如果你能在回答中加入如何更新这些安装以及安全补丁或新版本的信息就更好了(顺便说一下,OP已经提到过这个问题)。 - Rajat Gupta
我认为这个软件包叫做'icedtea-6-plugin',也就是比答案中多了一个连字符。我不敢编辑这样一个受欢迎/棒极了的答案,但或许有人敢试一下 :) - Mads Skjern
另外,我认为需要重新启动Firefox,所以或许应该将这一步骤添加到流程中。 - Mads Skjern
我找不到/.mozilla,所以我使用了/usr/lib/firefox-addons/plugins文件夹,并且在不重启Firefox的情况下成功运行。来源 - Quazi Irfan
@Shoan 我遇到了同样的错误,不过为了让Java在浏览器中工作,只需要跳过“alternatives”步骤,并创建符号链接即可。 - Hi-Angel

这里是一个经过测试和可行的解决方案,用于安装Oracle JDK 7及其所有文件,以便"javac"和其他一切正常工作:在Ubuntu中安装Oracle Java 7 (JDK)的方法
以下是命令(仅供方便参考):
  1. 此处下载最新的Oracle JDK 7。
  2. 将下载的Oracle Java JDK存档文件解压到您的主文件夹中 - 应该创建一个名为"jdk1.7.0_03"(适用于Java JDK7更新3)的新文件夹。将其重命名为"java-7-oracle"并使用以下命令将其移动到/usr/lib/jvm:
cd
sudo mkdir -p /usr/lib/jvm/      #just in case
sudo mv java-7-oracle/ /usr/lib/jvm/

3. Install Update Java package created by Bruce Ingalls (packages available for Ubuntu 11.10, 11.04, 10.10 and 10.04):

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install update-java

4. Now run the following command in a terminal to install Oracle Java JDK:

sudo update-java

Select the Java Version that you want to install and set as the default

几分钟后,Oracle Java JDK 应该已经成功安装在您的 Ubuntu 机器上。您可以通过在终端中运行以下命令来查看版本:
java -version
javac -version

注意!由于Java更改了其二进制文件的发布方式,下面这部分回答不再适用。出于历史原因,它被保留为原样。
更新:Oracle已发布Java 8(稳定版)。要安装它,请使用以下命令:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

更多信息请访问WebUpd8:通过PPA存储库在Ubuntu上安装Oracle Java 8 [JDK8]

我认为这个脚本适用于Gnome(工具),但对于Kubuntu机器来说需要安装很多额外的软件(例如,在Kubuntu上缺少gksudo)。 - Marcin Gil
在Precise上找到了一个好的、相对无痛的解决方案,只需安装jdk1.7.0_03即可。 - prusswan
我刚刚也用这种方法在Precise beta 2上安装了jdk1.7.0_03。虽然报告了一个错误(显然是在Zenity中),但这个错误似乎并没有影响到结果。 - Kelley
1我在Ubuntu 13.04上尝试了一下,它可以正常工作。+1 谢谢 - mamdouh alramadan
1.7.0_40也适用于Xubuntu 13.04。快速简便。 - paul
1如果我们不想删除任何现有的JDK,那么请在第一个对话框中跳过“删除现有JDK”的步骤,并添加此信息。 - Anwar


15我想知道为什么大多数人都倾向于使用第一个答案,它相当复杂且需要大量的手动操作,比如在您的计算机上下载安装程序并将其移动到服务器上。而您的答案简单而有效!谢谢! - sorin
4@SorinSbarnea 有些人不喜欢使用第三方软件仓库,因为它们并不总是及时更新或者保持在线状态。 - umop aplsdn
在Ubuntu服务器上,我不得不使用“sudo apt-get install python-software-properties”命令来获取add-apt-repository命令。 - Mark Butler
因为这个仓库通常都是过时的。 - dstarh
@sorin 有些人正在使用多个Java版本,而第一个答案让我们想起了需要验证当前活动的版本。 - prusswan
我喜欢手工作品,因为我想知道正在发生什么 - Anwar
1请注意,Webupd8 PPA还包含一个脚本,可以将Oracle Java设置为默认(如果您安装了多个JRE / JDK,则非常有用),使用sudo apt-get install oracle-java8-set-default进行安装。另外,请注意这个答案有点过时了,现在您应该安装oracle-java8-installer - Jonas Czech
这个已经不再适用了,webupd8team/java PPA 已经停止使用。 - Nathan F.

这是我刚刚在Oneiric上安装它的方法。答案可能会有点长,但对我来说有效。
从Oracle下载最新的Java SDK 1.7.0版本。然后将其解压到/usr/lib/jvm目录下:
cd /usr/lib/jvm/
sudo tar -xvzf ~/jdk-7-linux-x64.tar.gz
sudo mv jdk1.7.0 java-7-oracle
sudo ln -s java-7-oracle java-1.7.0-oracle

之后我在/usr/lib/jvm中创建了.java-1.7.0-oracle.jinfo文件,其内容如下:
alias=java-7-oracle
priority=100
section=non-free

jre ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel
jre java /usr/lib/jvm/java-7-oracle/jre/bin/java
jre java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm
jre javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws
jre jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol
jre keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool
jre pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200
jre policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool
jre rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid
jre rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry
jre unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200
jre orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd
jre servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool
jre tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv
jre jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec
jdk appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer
jdk apt /usr/lib/jvm/java-7-oracle/bin/apt
jdk extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck
jdk idlj /usr/lib/jvm/java-7-oracle/bin/idlj
jdk jar /usr/lib/jvm/java-7-oracle/bin/jar
jdk jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner
jdk java-rmi.cgi /usr/lib/jvm/java-7-oracle/bin/java-rmi.cgi
jdk javac /usr/lib/jvm/java-7-oracle/bin/javac
jdk javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc
jdk javah /usr/lib/jvm/java-7-oracle/bin/javah
jdk javap /usr/lib/jvm/java-7-oracle/bin/javap
jdk jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole
jdk jdb /usr/lib/jvm/java-7-oracle/bin/jdb
jdk jhat /usr/lib/jvm/java-7-oracle/bin/jhat
jdk jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo
jdk jmap /usr/lib/jvm/java-7-oracle/bin/jmap
jdk jps /usr/lib/jvm/java-7-oracle/bin/jps
jdk jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript
jdk jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd
jdk jstack /usr/lib/jvm/java-7-oracle/bin/jstack
jdk jstat /usr/lib/jvm/java-7-oracle/bin/jstat
jdk jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd
jdk native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii
jdk rmic /usr/lib/jvm/java-7-oracle/bin/rmic
jdk schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen
jdk serialver /usr/lib/jvm/java-7-oracle/bin/serialver
jdk wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen
jdk wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport
jdk xjc /usr/lib/jvm/java-7-oracle/bin/xjc
plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
plugin mozilla-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so

然后你需要告诉update-alternatives关于所有的新内容:
$ sudo -sH
Password:
# update-alternatives --quiet --install /usr/lib/xulrunner-addons/plugins/libjavaplugin.so xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so 100
# update-alternatives --quiet --install /usr/lib/mozilla/plugins/libjavaplugin.so mozilla-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so 100
# update-alternatives --quiet --install /usr/bin/appletviewer appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer 100 --slave /usr/share/man/man1/appletviewer.1 appletviewer.1 /usr/lib/jvm/java-7-oracle/man/man1/appletviewer.1
# update-alternatives --quiet --install /usr/bin/apt apt /usr/lib/jvm/java-7-oracle/bin/apt 100 --slave /usr/share/man/man1/apt.1 apt.1 /usr/lib/jvm/java-7-oracle/man/man1/apt.1
# update-alternatives --quiet --install /usr/bin/extcheck extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck 100 --slave /usr/share/man/man1/extcheck.1 extcheck.1 /usr/lib/jvm/java-7-oracle/man/man1/extcheck.1
# update-alternatives --quiet --install /usr/bin/idlj idlj /usr/lib/jvm/java-7-oracle/bin/idlj 100 --slave /usr/share/man/man1/idlj.1 idlj.1 /usr/lib/jvm/java-7-oracle/man/man1/idlj.1
# update-alternatives --quiet --install /usr/bin/jar jar /usr/lib/jvm/java-7-oracle/bin/jar 100 --slave /usr/share/man/man1/jar.1 jar.1 /usr/lib/jvm/java-7-oracle/man/man1/jar.1
# update-alternatives --quiet --install /usr/bin/jarsigner jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner 100 --slave /usr/share/man/man1/jarsigner.1 jarsigner.1 /usr/lib/jvm/java-7-oracle/man/man1/jarsigner.1
# update-alternatives --quiet --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 100 --slave /usr/share/man/man1/javac.1 javac.1 /usr/lib/jvm/java-7-oracle/man/man1/javac.1
# update-alternatives --quiet --install /usr/bin/javadoc javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc 100 --slave /usr/share/man/man1/javadoc.1 javadoc.1 /usr/lib/jvm/java-7-oracle/man/man1/javadoc.1
# update-alternatives --quiet --install /usr/bin/javah javah /usr/lib/jvm/java-7-oracle/bin/javah 100 --slave /usr/share/man/man1/javah.1 javah.1 /usr/lib/jvm/java-7-oracle/man/man1/javah.1
# update-alternatives --quiet --install /usr/bin/javap javap /usr/lib/jvm/java-7-oracle/bin/javap 100 --slave /usr/share/man/man1/javap.1 javap.1 /usr/lib/jvm/java-7-oracle/man/man1/javap.1
# update-alternatives --quiet --install /usr/bin/jconsole jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole 100 --slave /usr/share/man/man1/jconsole.1 jconsole.1 /usr/lib/jvm/java-7-oracle/man/man1/jconsole.1
# update-alternatives --quiet --install /usr/bin/jdb jdb /usr/lib/jvm/java-7-oracle/bin/jdb 100 --slave /usr/share/man/man1/jdb.1 jdb.1 /usr/lib/jvm/java-7-oracle/man/man1/jdb.1
# update-alternatives --quiet --install /usr/bin/jhat jhat /usr/lib/jvm/java-7-oracle/bin/jhat 100 --slave /usr/share/man/man1/jhat.1 jhat.1 /usr/lib/jvm/java-7-oracle/man/man1/jhat.1
# update-alternatives --quiet --install /usr/bin/jinfo jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo 100 --slave /usr/share/man/man1/jinfo.1 jinfo.1 /usr/lib/jvm/java-7-oracle/man/man1/jinfo.1
# update-alternatives --quiet --install /usr/bin/jmap jmap /usr/lib/jvm/java-7-oracle/bin/jmap 100 --slave /usr/share/man/man1/jmap.1 jmap.1 /usr/lib/jvm/java-7-oracle/man/man1/jmap.1
# update-alternatives --quiet --install /usr/bin/jps jps /usr/lib/jvm/java-7-oracle/bin/jps 100 --slave /usr/share/man/man1/jps.1 jps.1 /usr/lib/jvm/java-7-oracle/man/man1/jps.1
# update-alternatives --quiet --install /usr/bin/jrunscript jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript 100 --slave /usr/share/man/man1/jrunscript.1 jrunscript.1 /usr/lib/jvm/java-7-oracle/man/man1/jrunscript.1
# update-alternatives --quiet --install /usr/bin/jsadebugd jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd 100 --slave /usr/share/man/man1/jsadebugd.1 jsadebugd.1 /usr/lib/jvm/java-7-oracle/man/man1/jsadebugd.1
# update-alternatives --quiet --install /usr/bin/jstack jstack /usr/lib/jvm/java-7-oracle/bin/jstack 100 --slave /usr/share/man/man1/jstack.1 jstack.1 /usr/lib/jvm/java-7-oracle/man/man1/jstack.1
# update-alternatives --quiet --install /usr/bin/jstat jstat /usr/lib/jvm/java-7-oracle/bin/jstat 100 --slave /usr/share/man/man1/jstat.1 jstat.1 /usr/lib/jvm/java-7-oracle/man/man1/jstat.1
# update-alternatives --quiet --install /usr/bin/jstatd jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd 100 --slave /usr/share/man/man1/jstatd.1 jstatd.1 /usr/lib/jvm/java-7-oracle/man/man1/jstatd.1
# update-alternatives --quiet --install /usr/bin/native2ascii native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii 100 --slave /usr/share/man/man1/native2ascii.1 native2ascii.1 /usr/lib/jvm/java-7-oracle/man/man1/native2ascii.1
# update-alternatives --quiet --install /usr/bin/rmic rmic /usr/lib/jvm/java-7-oracle/bin/rmic 100 --slave /usr/share/man/man1/rmic.1 rmic.1 /usr/lib/jvm/java-7-oracle/man/man1/rmic.1
# update-alternatives --quiet --install /usr/bin/schemagen schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen 100 --slave /usr/share/man/man1/schemagen.1 schemagen.1 /usr/lib/jvm/java-7-oracle/man/man1/schemagen.1
# update-alternatives --quiet --install /usr/bin/serialver serialver /usr/lib/jvm/java-7-oracle/bin/serialver 100 --slave /usr/share/man/man1/serialver.1 serialver.1 /usr/lib/jvm/java-7-oracle/man/man1/serialver.1
# update-alternatives --quiet --install /usr/bin/wsgen wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen 100 --slave /usr/share/man/man1/wsgen.1 wsgen.1 /usr/lib/jvm/java-7-oracle/man/man1/wsgen.1
# update-alternatives --quiet --install /usr/bin/wsimport wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport 100 --slave /usr/share/man/man1/wsimport.1 wsimport.1 /usr/lib/jvm/java-7-oracle/man/man1/wsimport.1
# update-alternatives --quiet --install /usr/bin/xjc xjc /usr/lib/jvm/java-7-oracle/bin/xjc 100 --slave /usr/share/man/man1/xjc.1 xjc.1 /usr/lib/jvm/java-7-oracle/man/man1/xjc.1
# update-alternatives --quiet --install /usr/bin/java-rmi.cgi java-rmi.cgi /usr/lib/jvm/java-7-oracle/bin/java-rmi.cgi 100
# update-alternatives --quiet --install /usr/bin/ControlPanel ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel 100
# update-alternatives --quiet --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/jre/bin/java 100
# update-alternatives --quiet --install /usr/bin/java_vm java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm 100
# update-alternatives --quiet --install /usr/bin/javaws javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws 100
# update-alternatives --quiet --install /usr/bin/jcontrol jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol 100
# update-alternatives --quiet --install /usr/bin/keytool keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool 100
# update-alternatives --quiet --install /usr/bin/pack200 pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200 100
# update-alternatives --quiet --install /usr/bin/policytool policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool 100
# update-alternatives --quiet --install /usr/bin/rmid rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid 100
# update-alternatives --quiet --install /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry 100
# update-alternatives --quiet --install /usr/bin/unpack200 unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200 100
# update-alternatives --quiet --install /usr/bin/orbd orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd 100
# update-alternatives --quiet --install /usr/bin/servertool servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool 100
# update-alternatives --quiet --install /usr/bin/tnameserv tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv 100
# update-alternatives --quiet --install /usr/bin/jexec jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec 100

现在你可以使用update-alternatives来选择新安装的Java SDK。
# update-alternatives --config java              # Select java-1.7.0-oracle
# update-java-alternatives --set java-1.7.0-oracle
# exit
$

这对我有用,如果有更优雅的方法(不使用第三方PPA),我很乐意听到。我还需要测试一下Firefox是否可以运行Java。

1工作得很好,除了最后一个命令出现错误(尽管其他一切都正常,甚至在Firefox/Chrome中也可以运行)。这似乎是由于默认的OpenJDK6安装与Oneiric有关。“update-alternatives: error: no alternatives for -javaplugin.so.” 在隐藏的.java.1.6.0.jinfo文件中,似乎有一个指向-javaplugin.so的替代方案。我们是否应该创建第三个替代方案,并将其指向libnpjp2.so呢? - Nicholi
2我决定将BigWhale提到的步骤放入一个简单的Shell脚本中。唯一需要手动进行的步骤是从Oracle的网站下载64位tar.gz文件。请点击这里查看详细说明。 - julius
1这是唯一的解决方案,展示了如何添加man手册页! - DavidGamba
@DavidG 外星人安德烈的解决方案也非常完美地运作。 - Anwar
1此解决方案适用于64位的Ubuntu。对于32位系统,我们应该使用i386而不是amd64 - Anwar

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

更新的答案:

我建议使用webupd8team ppa中的一个安装程序来进行安装:

  1. 在终端中输入以下两个命令以添加此PPA并更新软件包列表:

    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    
  2. 输入以下命令之一(或多个)以安装所需的专有Java:

    sudo apt-get install oracle-java6-installer
    sudo apt-get install oracle-java7-installer
    sudo apt-get install oracle-java8-installer
    sudo apt-get install oracle-java9-installer
    
  3. 当相应的Java安装程序脚本加载并下载安装专有Java软件包时,您还可以输入以下命令来检查安装结果:

    java -version
    
你应该会得到一个终端输出(对于Java8稳定版本),类似于这样:
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)

更多信息:http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html 注意:这些软件包提供了Oracle Java JDK,其中包括Java JDK、JRE和Java浏览器插件。而webupd8team/java PPA仅包含这些安装程序,它们只是连接到Oracle Java下载站点并安装最新的JDK。

1感谢您的答复。只有这种方式才使得我的Chrome JRE工作正常! - fth
安装时是否只安装JRE还是整个JDK?如果是整个JDK,有什么方法可以限制只安装JRE? - Rajat Gupta
这种安装方式会在新版本发布时自动更新吗?而且添加这个ppa会不会无意中给我的服务器添加其他类型的软件? - Rajat Gupta
4这将安装 JDK: "该软件包提供了Oracle Java JDK 7(其中包括Java JDK、JRE和Java浏览器插件)。 然而,您不能只安装Oracle JRE - 该PPA仅提供完整的Oracle JDK7软件包。" [ref] (http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html) - kiri

注意:WebUpd8团队的PPA已于2019年4月16日起停止使用。因此,该PPA不再包含任何Java文件。更多信息请参阅Launchpad上PPA页面。因此,这种方法不再有效存在,仅因历史原因而保留。
非常感谢之前的所有回答。我想补充一下这个答案,以简化事情,这是由www.webupd8.org完成的,可以在2-5分钟内完成安装。
此安装包括:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

那就这样吧!现在来检查一下Java版本。
java -version

输出结果将是这样的
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) Server VM (build 23.25-b01, mixed mode

可能会有一个新版本,然后你可以用这个命令简单地更新它:
sudo update-java-alternatives -s java-7-oracle

设置环境变量
sudo apt-get install oracle-java7-set-default

更多信息,请查看通过PPA存储库在Ubuntu中安装Oracle Java 7

32-5分钟?花了77分钟。 - user204653
3不错的解决方案。这个应该得到更高的赞同。根据你的网络速度,安装时间可能会超过5分钟(下载大小约为70MB)。至于设置默认的Java虚拟机,我更倾向于使用sudo update-alternatives --config java命令。 - landroni

这个解决方案将为您提供干净的构建软件包,就像在Oracle出现之前Ubuntu所使用的那样。
答案如下:
首先是答案,然后是解释。打开终端并逐行复制粘贴以下内容。
wget https://raw.githubusercontent.com/ladios/oab-java6/master/oab-java.sh -O oab-java.sh
chmod +x oab-java.sh
sudo ./oab-java.sh

这将构建官方的sun-java6-*软件包,并使其在软件中心中可用。如果您还想要oracle-java7-*软件包,请按照以下方式运行脚本:
sudo ./oab-java.sh -7

现在您可以使用您偏好的软件包管理器安装这些软件包。

说明

当Oracle改变了Java的分发许可证后,Linux发行版不再被允许更新官方软件包。Github用户rraptorr获取到了此前用于构建软件包的Debian脚本,并对其进行修改,使其能够与来自Oracle的更新下载配合工作。他现在为SUN Java6Oracle Java7提供打包脚本。

oab.java.sh脚本只是一个包装器,它会自动下载当前版本,创建软件包,并将其添加到本地存储库中。

进一步说明

使用此方法创建和安装的软件包将不会自动接收更新,除非重新运行该脚本。您可以通过定期运行此脚本来绕过这一限制,可以使用anacron将脚本放置在/etc/cron.daily目录中,这样是最安全的方式。

wget https://raw.githubusercontent.com/ladios/oab-java6/master/oab-java.sh -O /root/oab-java.sh
chmod +x /root/oab-java.sh
ln -s /root/oab-java.sh /etc/cron.daily/oab-java

现在您的官方Java软件包将始终保持最新状态。

1我对这个脚本有很多问题 -_- - qodeninja
@qodeninja,像什么?我从来没有遇到过这个脚本的问题。如果没有出现故障,执行上述3行代码在每台Ubuntu机器上肯定能正常工作。 - mniess
我有一个新的Ubuntu 10.04的Linode实例,我试图使用这个脚本安装JRE 7。由于缺少依赖项,脚本会长时间停滞不前。然后我不得不停止脚本,并使用apt-get自己安装依赖项。即使我已经安装了所有东西,脚本仍然失败。 - qodeninja
脚本实际上并没有什么特别之处。听起来你的盒子可能出了点问题。我从8.04到12.04一直在使用它,从来没有遇到过问题。我刚刚在我的10.04服务器上尝试了一下,基本上是原始状态,也能正常工作。这是应该的,因为这个脚本只是使用了旧的Debian构建脚本,这些脚本曾经用于为Debian(和Ubuntu)提供sun-java*软件包。 - mniess
在Lubuntu 15.04上,它开始得很好,但过了一段时间后,我得到了debian/rules:67: recipe for target 'get-orig-source' failed make: *** [get-orig-source] Error 22 make: Leaving directory '/var/local/oab/src' 11678's retcode: 2 failed 的错误代码。 - rubo77
还需要吗?与从ppa:webupd8team/java安装Java相比,有什么好处呢?(第一个答案在这里) - rubo77

这对于我开发需求来说非常有效,可以运行/编译1.6或1.7版本。之前我只是使用Ubuntu apt软件包中的1.6版本。
  1. 下载1.7 gzip
  2. 解压到文件夹中
  3. 在bash文件中更新JAVA_HOME和PATH

    JAVA_HOME=/opt/java/jdk1.7.0_25
    export JAVA_HOME
    
    PATH=$JAVA_HOME/bin:$PATH
    export PATH
    

在AMD64上,您需要稍微修改一下创建符号链接的命令。
ln -s /usr/lib/jvm/jre1.7.0/lib/amd64/libnpjp2.so ~/.mozilla/plugins/

只需要将 i386 改成 amd64

好主意!在我读了你的回答之前,我的12.04 64位系统一直无法正常工作。谢谢! - Scaine
2这个回答完全脱离了上下文。 - landroni
1这不是问题的答案,而应该是一条评论。 - Anwar