如何在Ubuntu 16.04或更高版本上安装openjdk 7?
我想将我的主系统升级到16.04,但我处理需要OpenJDK 7的项目。
显然,它不能从一个简单的apt-get install openjdk-7-jdk
。 存储库中仅列出版本8和9。
谁能指点我如何安装它的说明?
安全警告
下面提到的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(受限制)”定义为附加软件包存储库,更新您的信息,并使用其依赖项(来自该存储库)安装软件包。
看起来openjdk-r / ppa的维护者不会更新版本7u95-2.6.4-3之外的openjdk-7软件包。 该软件包的描述“从debian GNU / Linux的主存档中的debian实验中复制”为我们提供了关于如何自己处理这个问题的线索。
选项1:手动安装
-
下载适用于您的体系结构的包:
(对于大多数用户来说,这意味着amd64如果是64位,或者i386如果安装了32位Ubuntu)- 的openjdk -7- JDK
- 的openjdk -7- JRE
- 的openjdk -7- JRE-无头
- 中的libjpeg62涡轮增压
- libfontconfig1 (仅限Ubuntu 17.10及更早版本;请参阅底部的注释)
- fontconfig-config (仅限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-无头:AMD64 的openjdk -7- JDK:AMD64
如果没有依赖性问题,那很好,你就完成了,跳到#4。 否则,如果您需要解决一些依赖性问题,则使用以下方法处理:
sudo apt install -f
请注意,在让
apt
解析依赖项后,无需重新运行dpkg
。 它将自动完成openjdk软件包的安装。 -
更新java替代品。 您可以使用
update-java-alternatives --list
查看所有已安装的Java版本。 要激活OpenJDK Java 1.7,请运行:sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
您可能会注意到有关
IcedTeaPlugin.so
插件不可用的错误。 对于使用JDK的开发人员来说,这不是一个真正的问题。 -
validationjava工作正常:
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及其依赖项。
-
创建一个固定文件,告诉我们只考虑我们感兴趣的软件包(我们当然不希望我们的整个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
注意:虽然这是添加debian密钥环的最简单方法,但它可能不是最新的。 在步骤4中运行
apt update
时,请检查以下输出:W:GPG错误:http://cdn-fastly.deb.debian.org/debian experimental InRelease:由于公钥不可用,无法validation以下签名:NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010 E:未签署存储库“http://httpredir.debian.org/debian实验性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
应与您在警告消息中看到的pubkeys相匹配。 -
添加所需的存储库:
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 stable的不可满足的依赖关系。 实验(对于openjdk-7)和sid(对于libjpeg62-turbo,libfontconfig1和fontconfig-config)存储库对依赖版本更宽松。
-
更新
apt
缓存(由于Debian的软件包列表很大,所以需要一段时间):sudo apt update
-
安装openjdk-7-jdk:
sudo apt install openjdk-7-jdk
-
更新java替代品。 您可以使用
update-java-alternatives --list
查看所有已安装的Java版本。 要激活OpenJDK Java 1.7,请运行:sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
您可能会注意到有关
IcedTeaPlugin.so
插件不可用的错误。 对于使用JDK的开发人员来说,这不是一个真正的问题。 -
validationjava工作正常:
java -version
应该输出类似于:
java版“1.7.0_161” OpenJDK运行时环境(IcedTea 2.6.12)(7u161-2.6.12-1) OpenJDK 64位服务器VM(内置24.161-b01,混合模式)
fontconfig说明
必须在Ubuntu 17.10及更早版本libfontconfig1
和fontconfig-config
升级到2.12或更高版本。 Debian的更新包不包含Ubuntu的自定义,因此一些应用程序显示安装了这些包的丑陋字体; 例如Charles Web Debugging Proxy。 根据您使用的程序,您可能会或可能不会受此问题的影响。
您可以从Azul下载OpenJDK 7,它可能满足您的需求。 它们都有DEB(用于包装系统)和ZIP分发。 我只使用ZIP发行版。
在Ubuntu 16.04,Ubuntu 17.04上安装Java 7
建议安装Oracle Java ,因为它比OpenJDK具有更高的性能。 出于这个原因,我想发布一个替代方案。 如果要安装Oracle Java,请在终端中运行以下命令以从PPA安装它。
-
添加所需的存储库:
sudo add-apt-repository ppa:webupd8team/java
-
更新
apt
缓存并安装oracle-java7 :sudo apt update sudo apt install java-common oracle-java7-installer
在安装过程中,您需要接受Oracle许可协议。 安装完成后,我们需要设置Java环境变量,例如JAVA_HOME
-
更正Java环境变量。
sudo apt install oracle-java7-set-default source /etc/profile
-
validationjava工作正常:
java -version
应该输出类似于:
java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-u80) Java HotSpot(TM) 64-Bit Server VM (build 25.131-u80, mixed mode)
Oracle JDK替代方案:
我想避免使用存储库,因为我在7,8和9之间切换,所以我最终得到了Oracle JDK而不是OpenJDK。 从官方网站下载。 我不确定最新版本80是否包含与OpenJDK的build 161相同的修复程序。但是我有它用于开发,所以这对我来说并不意味着什么。
然后你需要在环境中设置$JAVA_HOME
,以便各种脚本选择正确的JDK(例如Maven,JBoss等)。
为了完整起见,JDK版本7已经过EOL,即使是JDK 8公共支持也将于2017年9月终止,并且在2018年9月之后将不会公开更新。
使用容器
这是关于如何在
Ubuntu上运行
删除软件的普遍有效的答案: 容纳您的应用程序 。
例如,使用Docker和较旧的Ubuntu基本映像,其中您正在寻找的软件仍然可用/维护。
它也可以反过来工作; 在当前运行的稳定Ubuntu上的较新甚至其他Linux发行版上试用该软件。
使用Ubuntu 14.04的Java 7示例
-
安装Docker – Docker CE免费版很好。 请参阅https://docs.docker.com/install/linux/docker-ce/ubuntu/,或在最近发布的Ubuntu版本中使用
docker.io
软件包。 -
在空文件夹中,创建一个
Dockerfile
文件:FROM ubuntu:trusty RUN apt-get update \ && apt-get install -y \ openjdk-7-jdk \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["/usr/bin/java"]
如果需要,在该命令中添加更多包。
-
在该文件夹中,运行:
docker build -t gertvdijk/java7 .
-
使用该Java 7映像在单用途容器内运行命令:
例如
java -version
:docker run --rm -it gertvdijk/java7 -version
输出:
java version "1.7.0_181" OpenJDK Runtime Environment (IcedTea 2.6.14) (7u181-2.6.14-0ubuntu0.1) OpenJDK 64-Bit Server VM (build 24.181-b01, mixed mode)
-
(可选)创建包装以方便使用。
-
使用内容创建文件
/usr/local/bin/java7-in-docker
:#!/usr/bin/env sh -e DOCKER_IMAGE=gertvdijk/java7 PWD="$(pwd)" exec docker run \ --rm -it \ -v ${PWD}:${PWD} \ -v "/etc/passwd:/etc/passwd:ro" \ -v "/etc/group:/etc/group:ro" \ --user "$(id -u):$(id -g)" \ --workdir "${PWD}" \ "${DOCKER_IMAGE}" \ $@
这将使当前工作目录在容器内可用 – 而不是整个文件系统,并且它将在容器命名空间中模拟您的本地用户帐户。
-
将其标记为可执行:
sudo chmod +x /usr/local/bin/java7-in-docker
-
-
透明地运行Java 7,如下所示:
java7-in-docker -jar relative/path/to/some.jar
MDMower上面关于手动或自动安装的回答的补充。(*)
在Ubuntu 16.04.5 LTS上使用hwe-16.04-edge内核而Cinnamon作为DE,我在安装/升级libfontconfig1及其依赖项fontconfig-config时遇到了意想不到的字体行为。 突然间,我在许多应用程序的菜单栏中,以及终端窗口和我的应用程序中的许多其他地方,都有奇怪的,薄的,难以辨认的单空格字体和其他“丑陋”字体。
如果您遇到此问题:在运行时似乎没有工作修复。 没有必要浪费你的时间来搜索任何Cinnamon或Gnome或FontConfig或你的终端首选项中的设置(例如gconf-editor / gconftool,gnome-tweak-tool,fc- *)。 这对“破碎”字体没有任何影响。 似乎Fontconfig-Config的更新以某种方式重置了对某些字体的已知/缓存引用,而某些后备字体正在被渲染,而仍然是按其原始名称引用字体。
只需重新启动系统,一切都恢复正常。 即使只是退出并重新登录也可能就足够了。
(*)这应该是@MDMower对上述答案的补充或评论,但StackExchange“声誉”不足以禁止我将其作为评论发布。 我的编辑被拒绝(部分理所当然),因此这个垃圾邮件“回答”。 抱歉。 如果有足够“权力”的人可能将这个“答案”移动到评论中,我会很高兴。 谢谢!
一个简单的方法是:
将这些行添加到: /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以防止从该存储库安装或更新包(这可能导致意外行为)。
一个问题是你需要保存这些软件包,以便在更新系统时(特别是tzdata
软件包)不会删除它们。
注意 :使用此方法作为最后的手段,更喜欢任何其他允许您更新而没有问题的方法。