我想将主系统升级到16.04,但是我在需要OpenJDK 7的项目上工作。
显然,它是不可用的apt-get install openjdk-7-jdk
。存储库中仅列出版本8和9。
谁能指出我的安装说明?
我想将主系统升级到16.04,但是我在需要OpenJDK 7的项目上工作。
显然,它是不可用的apt-get install openjdk-7-jdk
。存储库中仅列出版本8和9。
谁能指出我的安装说明?
Answers:
安全警告
下文提到的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(受限制)”定义为附加的软件包存储库,更新您的信息,并从其存储库中安装具有其依赖项的软件包。
sudo update-java-alternatives
以便可以将openjdk-7设置为默认值。
编辑22-七月-2019:当前答案不起作用。以下引用的JDK软件包在Debian Experiment上不再可用。无论如何,它们落后于包含更多最新安全更新的Ubuntu Trusty软件包。请参阅其他答案,直到可以解决为止(抱歉,没有ETA)。
看起来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*
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
注意:虽然这是添加debian密钥环的最简单方法,但它可能不是最新的。apt update
在步骤4中运行时,请检查以下输出:
W:GPG错误:http://cdn-fastly.deb.debian.org/debian实验性InRelease:无法验证以下签名,因为公钥不可用: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稳定版无法满足的依赖关系。实验性(对于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,混合模式)
fontconfig注释
libfontconfig1
并且fontconfig-config
必须在Ubuntu 17.10及更早版本上升级到2.12或更高版本。Debian的更新包不包含Ubuntu的自定义设置,因此某些应用程序显示了安装了这些包的丑陋字体。例如Charles Web调试代理。根据您使用的程序,您可能会或可能不会受到此问题的影响。
在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
验证Java是否正常工作:
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)
apt-get
试图从不存在的页面获取安装程序。-如果您需要JDK 7,则可以从存档网站下载安装程序:oracle.com/technetwork/java/javase/downloads/…–
Oracle JDK替代品:
我想避免使用存储库,因为我在7、8和9之间切换,所以我最终选择了Oracle JDK,而不是OpenJDK。从官方网站下载。我不确定最新的版本80是否包含与OpenJDK的版本161相同的修复程序。但是我拥有用于开发的功能,因此对我来说意义不大。
然后,您需要$JAVA_HOME
在环境中进行设置,以便各种脚本选择正确的JDK(例如Maven,JBoss等)。
为了完整起见,对JDK 7版本进行了EOL处理,甚至自2017年9月以来就终止了JDK 8公共支持,并且在2018年9月之后将不再公开更新。
这是关于如何<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"]
如果需要,在该命令中添加更多软件包。
在该文件夹中,运行:
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
一种简单的方法是:
将这些行添加到/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
软件包)时不会将其删除。
注意:使用此方法作为最后的选择,请选择其他任何可以使您毫无问题地进行更新的方法。