我想将我的主系统升级到 16.04,但我从事需要 OpenJDK 7 的项目。
显然它不能从一个平凡的apt-get install openjdk-7-jdk. 存储库中仅列出了版本 8 和 9。
任何人都可以指出我如何安装它的说明吗?
ona*_*rda 149
安全警告
下面提到的 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
Run Code Online (Sandbox Code Playgroud)
这将“用于 OpenJDK 上传的 PPA(受限)”定义为附加包存储库,更新您的信息,并安装包及其依赖项(来自该存储库)。
MDM*_*wer 65
2019 年 7 月 22 日编辑:此答案目前不起作用。以下引用的 JDK 包在 Debian 实验版上不再可用。无论如何,它们都落后于包含最新安全更新的 Ubuntu Trusty 软件包。请参考其他答案,直到可以解决此问题(抱歉,没有预计到达时间)。
看起来 openjdk-r/ppa 的维护者不会更新超过 7u95-2.6.4-3 版本的 openjdk-7 包。不过,该软件包的描述“从 Debian GNU/Linux 主要存档中的 debian 实验复制”为我们提供了有关如何自己处理此问题的线索。
选项 1:手动安装
下载适用于您的架构的软件包:(
对于大多数用户来说,这意味着如果 64 位为 amd64,如果安装了 32 位 Ubuntu,则为 i386)
(尝试)使用dpkg以下命令安装软件包:
Ubuntu 17.10 及更早版本:
sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config*
Run Code Online (Sandbox Code Playgroud)
Ubuntu 18.04 及更高版本:
sudo dpkg -i openjdk-7-* libjpeg62-turbo*
Run Code Online (Sandbox Code Playgroud)检查从 的输出dpkg。如果存在依赖性问题——这很可能——您将看到以下内容(您的架构替换为 amd64):
处理时遇到错误: openjdk-7-jre:amd64 openjdk-7-jre-headless:amd64 openjdk-7-jdk:amd64
如果没有依赖问题,很好,你已经完成了,跳到 #4。否则,如果您需要解决一些依赖问题,可以通过以下方式处理:
sudo apt install -f
Run Code Online (Sandbox Code Playgroud)
请注意,dpkg在让apt解析依赖项后无需重新运行。它将自动完成 openjdk 包的安装。
更新 java 替代品。您可以查看所有已安装的 java 版本update-java-alternatives --list。要激活 OpenJDK Java 1.7,请运行:
sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
Run Code Online (Sandbox Code Playgroud)
您可能会注意到有关IcedTeaPlugin.so插件不可用的错误。对于使用 JDK 的开发人员来说,这并不是真正关心的问题。
验证 java 是否正常工作:
java -version
Run Code Online (Sandbox Code Playgroud)
它应该输出类似于:
java版本“1.7.0_161” OpenJDK 运行时环境 (IcedTea 2.6.12) (7u161-2.6.12-1) OpenJDK 64 位服务器 VM(构建 24.161-b01,混合模式)
选项 2:自动安装(包括更新apt)
Pinning可用于从 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
Run Code Online (Sandbox Code Playgroud)
对于 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
Run Code Online (Sandbox Code Playgroud)安装 Debian 密钥环:
sudo apt install debian-archive-keyring
Run Code Online (Sandbox Code Playgroud)
注意:虽然这是添加 debian 密钥环的最简单方法,但它可能不是最新的。apt update在第 4 步中运行时,检查类似以下的输出:
W:GPG 错误:http://cdn-fastly.deb.debian.org/debian Experimental InRelease:以下签名无法验证,因为公钥不可用:NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010 E:存储库“http://httpredir.debian.org/debian Experimental InRelease”未签名。
如果您看到此错误,请手动添加必要的键:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
Run Code Online (Sandbox Code Playgroud)
在哪里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'
Run Code Online (Sandbox Code Playgroud)
为什么不使用稳定的 Debian 存储库?您将遇到 Debian 稳定版无法满足的依赖关系。实验(对于 openjdk-7)和 sid(对于 libjpeg62-turbo、libfontconfig1 和 fontconfig-config)存储库对依赖版本更宽松。
更新apt缓存(由于 Debian 的软件包列表很大,因此预计这需要一段时间):
sudo apt update
Run Code Online (Sandbox Code Playgroud)安装 openjdk-7-jdk:
sudo apt install openjdk-7-jdk
Run Code Online (Sandbox Code Playgroud)更新 java 替代品。您可以查看所有已安装的 java 版本update-java-alternatives --list。要激活 OpenJDK Java 1.7,请运行:
sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
Run Code Online (Sandbox Code Playgroud)
您可能会注意到有关IcedTeaPlugin.so插件不可用的错误。对于使用 JDK 的开发人员来说,这并不是真正关心的问题。
验证 java 是否正常工作:
java -version
Run Code Online (Sandbox Code Playgroud)
它应该输出类似于:
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 调试代理。根据您使用的程序,您可能会或可能不会受到此问题的影响。
Tho*_*sen 14
您可以从 Azul 下载可能适合您需求的 OpenJDK 7。它们都有一个 DEB(用于包系统)和一个 ZIP 发行版。我只使用过 ZIP 发行版。
http://www.azul.com/downloads/zulu/zulu-linux/
这是关于如何<outdated>在<current>Ubuntu上运行已删除软件的普遍有效的答案:容器化您的应用程序。
例如,使用 Docker 和较旧的 Ubuntu 基础映像,其中您正在寻找的软件仍然可用/维护。
它也可以反过来工作;在当前运行的稳定 Ubuntu 上,在更新的甚至其他 Linux 发行版上试用该软件。
安装 Docker - Docker CE 免费版本很好。参见例如https://docs.docker.com/install/linux/docker-ce/ubuntu/或使用docker.io最近发布的 Ubuntu 版本中的包。
在一个空文件夹中,创建一个文件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"]
Run Code Online (Sandbox Code Playgroud)
如果需要,可以在该命令中添加更多包。
在该文件夹中,运行:
docker build -t gertvdijk/java7 .
Run Code Online (Sandbox Code Playgroud)使用该 Java 7 映像在一次性容器中运行命令:
例如java -version:
docker run --rm -it gertvdijk/java7 -version
Run Code Online (Sandbox Code Playgroud)
输出:
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)
Run Code Online (Sandbox Code Playgroud)(可选)为方便起见,创建一个包装器。
创建一个/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}" \
$@
Run Code Online (Sandbox Code Playgroud)
这将使当前工作目录在容器内可用 - 而不是您的整个文件系统,它将在容器命名空间中模拟您的本地用户帐户。
将其标记为可执行文件:
sudo chmod +x /usr/local/bin/java7-in-docker
Run Code Online (Sandbox Code Playgroud)透明地运行您的 Java 7,如下所示:
java7-in-docker -jar relative/path/to/some.jar
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
362503 次 |
| 最近记录: |