![如何在 Ubuntu 16.04 或更高版本上安装 openjdk 7?](https://linux22.com/image/989535/%E5%A6%82%E4%BD%95%E5%9C%A8%20Ubuntu%2016.04%20%E6%88%96%E6%9B%B4%E9%AB%98%E7%89%88%E6%9C%AC%E4%B8%8A%E5%AE%89%E8%A3%85%20openjdk%207%EF%BC%9F.png)
我想将我的主系统升级到 16.04,但我从事的项目需要 OpenJDK 7。
显然它不是从普通的 获得的apt-get install openjdk-7-jdk
。存储库中仅列出了版本 8 和 9。
有人能告诉我如何安装它的说明吗?
答案1
安全警告
下文提到的 PPA 中的软件包未使用 Java 安全补丁进行更新。请勿在生产中使用;请参阅其他答案。
在撰写本文时,OpenJDK 7 的最后一次上传是在 '2016-04-22',版本为 7u95,并且仍可作为“最新版本”使用,而 Ubuntu 14.04 已经已更新至 7u181。
更新:虽然这是获得投票最多的答案,但由于该 PPA 缺乏安全更新,它可能不是您想要在 2018 年使用的答案。
我发现以下对我有用的说明:
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
这将“OpenJDK 上传的 PPA(受限)”定义为附加软件包存储库,更新您的信息,并安装该软件包及其依赖项(来自该存储库)。
答案2
编辑于 2019 年 7 月 22 日:此答案目前不起作用。下面引用的 JDK 软件包在 Debian Experimental 上不再可用。无论如何,它们落后于包含较新安全更新的 Ubuntu Trusty 软件包。请参考其他答案,直到可以解决此问题(抱歉,没有预计到达时间)。
openjdk-r/ppa 的维护者似乎不会更新版本 7u95-2.6.4-3 以外的 openjdk-7 软件包。不过,该软件包的描述“从 Debian GNU/Linux 主存档中的 debian experiments 复制”为我们提供了有关如何自行处理此问题的线索。
选项 1:手动安装
下载适合您的架构的软件包:(
对于大多数用户来说,如果安装的是 64 位,则下载 amd64;如果安装的是 32 位 Ubuntu,则下载 i386)- openjdk-7-jdk
- openjdk-7-jre
- openjdk-7-jre-headless
- libjpeg62-turbo
- libfontconfig1(仅限 Ubuntu 17.10 及更早版本;请参阅底部的注释)
- 字体配置-配置(仅限 Ubuntu 17.10 及更早版本;请参阅底部的注释)
(尝试)使用以下命令安装软件包
dpkg
:Ubuntu 17.10 及更早版本:
sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config*
Ubuntu 18.04 及更高版本:
sudo dpkg -i openjdk-7-* libjpeg62-turbo*
检查输出
dpkg
。如果存在依赖性问题(很可能存在),您将看到以下内容(您的体系结构替换为 amd64):处理时遇到错误: openjdk-7-jre:amd64 openjdk-7-jre-headless:amd64 openjdk-7-jdk:amd64
如果没有依赖关系问题,那就太好了,您已经完成了,跳到第 4 步。否则,如果您需要解决一些依赖关系问题,可以使用以下方法处理:
sudo apt install -f
dpkg
注意,解析依赖项后无需重新运行apt
。它将自动完成 openjdk 包的安装。更新 Java 替代品。您可以使用 查看所有已安装的 Java 版本
update-java-alternatives --list
。要激活 OpenJDK Java 1.7,请运行:sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
您可能会注意到有关插件不可用的错误
IcedTeaPlugin.so
。对于使用 JDK 的开发人员来说,这并不是什么大问题。验证 Java 是否正常工作:
java -version
输出类似如下内容:
Java 版本“1.7.0_161” OpenJDK 运行时环境(IcedTea 2.6.12)(7u161-2.6.12-1) OpenJDK 64 位服务器 VM(版本 24.161-b01,混合模式)
选项 2:自动安装(包括更新apt
)
固定可以用来从 Debian 存储库安装和更新 openjdk-7-jdk 及其依赖项。
创建一个固定文件,告诉
apt
我们只考虑我们感兴趣的软件包(我们当然不希望我们的整个 Ubuntu 发行版都用 Debian 实验软件包“升级”)。创建
/etc/apt/preferences.d/debian
包含以下内容的文件。您需要超级用户权限,因此请使用sudo vim
、sudo nano
、gksudo gedit
等之一。Package: * Pin: release o=Debian,n=experimental Pin-Priority: -1 Package: * Pin: release o=Debian,n=sid Pin-Priority: -1 Package: openjdk-7-jdk Pin: release o=Debian,n=experimental Pin-Priority: 500 Package: openjdk-7-jre Pin: release o=Debian,n=experimental Pin-Priority: 500 Package: openjdk-7-jre-headless Pin: release o=Debian,n=experimental Pin-Priority: 500 Package: libjpeg62-turbo Pin: release o=Debian,n=sid Pin-Priority: 500
对于 Ubuntu 17.10 及更早版本,还需附加以下内容(并参阅底部的注释):
Package: libfontconfig1 Pin: release o=Debian,n=sid Pin-Priority: 500 Package: fontconfig-config Pin: release o=Debian,n=sid Pin-Priority: 500
安装 Debian 密钥环:
sudo apt install debian-archive-keyring
apt update
注意:虽然这是添加 Debian 密钥环的最简单方法,但它可能不是最新的。在步骤 4 中运行时检查如下输出:W:GPG 错误:http://cdn-fastly.deb.debian.org/debian experiment InRelease:由于公钥不可用,无法验证以下签名:NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010 E:存储库“http://httpredir.debian.org/debian experiments InRelease”尚未签名。
如果看到此错误,请使用以下命令手动添加必要的键:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
其中
8B48AD6246925553
和7638D0442B90D010
应该与您在警告消息中看到的公钥相匹配。添加所需的存储库:
sudo add-apt-repository 'deb http://httpredir.debian.org/debian experimental main' sudo add-apt-repository 'deb http://httpredir.debian.org/debian sid main'
为什么不使用稳定的 Debian 存储库?您会遇到 Debian 稳定版无法满足的依赖关系。实验性(针对 openjdk-7)和 sid(针对 libjpeg62-turbo、libfontconfig1 和 fontconfig-config)存储库对依赖版本的要求更宽松。
更新
apt
缓存(由于 Debian 的软件包列表很大,因此预计这会花费一些时间):sudo apt update
安装 openjdk-7-jdk:
sudo apt install openjdk-7-jdk
更新 Java 替代品。您可以使用 查看所有已安装的 Java 版本
update-java-alternatives --list
。要激活 OpenJDK Java 1.7,请运行:sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
您可能会注意到有关插件不可用的错误
IcedTeaPlugin.so
。对于使用 JDK 的开发人员来说,这并不是什么大问题。验证 Java 是否正常工作:
java -version
输出类似如下内容:
Java 版本“1.7.0_161” OpenJDK 运行时环境(IcedTea 2.6.12)(7u161-2.6.12-1) OpenJDK 64 位服务器 VM(版本 24.161-b01,混合模式)
字体配置说明
libfontconfig1
并且fontconfig-config
必须在 Ubuntu 17.10 及更早版本上升级到 2.12 或更高版本。Debian 的更新包不包含 Ubuntu 的自定义,因此安装这些包后,某些应用程序会显示难看的字体;例如 Charles Web 调试代理。根据您使用的程序,您可能会或可能不会受到此问题的影响。
答案3
您可以从 Azul 下载 OpenJDK 7,它可能会满足您的需求。它们都有 DEB(用于软件包系统)和 ZIP 发行版。我只使用过 ZIP 发行版。
答案4
一个简单的方法是:
将这些行添加到/etc/apt/sources.list
::
deb http://security.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
然后更新 apt 并安装。您可能需要降级tzdata
软件包。
之后我会建议注释掉这些行并再次 apt update 以防止从该存储库安装或更新软件包(这可能会导致意外行为)。
一个问题是您需要保留这些包,以便在更新系统(特别是包)时它们不会被删除tzdata
。
笔记:将此方法作为最后的手段,最好使用任何其他可以让您顺利更新的方法。