如何在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:手动安装

  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及更早版本;请参阅底部的注释)
  2. (尝试)使用dpkg安装软件包:

    Ubuntu 17.10及更早版本:

     sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config* 

    Ubuntu 18.04及更高版本:

     sudo dpkg -i openjdk-7-* libjpeg62-turbo* 
  3. 检查dpkg的输出。 如果存在依赖性问题 – 很可能 – 您将看到以下内容(使用您的体系结构替换amd64):

     处理时遇到错误:
    的openjdk -7- JRE:AMD64
    的openjdk -7- JRE-无头:AMD64
    的openjdk -7- JDK:AMD64 

    如果没有依赖性问题,那很好,你就完成了,跳到#4。 否则,如果您需要解决一些依赖性问题,则使用以下方法处理:

     sudo apt install -f 

    请注意,在让apt解析依赖项后,无需重新运行dpkg 。 它将自动完成openjdk软件包的安装。

  4. 更新java替代品。 您可以使用update-java-alternatives --list查看所有已安装的Java版本。 要激活OpenJDK Java 1.7,请运行:

     sudo update-java-alternatives -s java-1.7.0-openjdk-amd64 

    您可能会注意到有关IcedTeaPlugin.so插件不可用的错误。 对于使用JDK的开发人员来说,这不是一个真正的问题。

  5. 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及其依赖项。

  1. 创建一个固定文件,告诉我们只考虑我们感兴趣的软件包(我们当然不希望我们的整个Ubuntu发行版“升级”与Debian实验包)。

    使用以下内容创建文件/etc/apt/preferences.d/debian 。 您需要超级用户权限,因此请使用sudo vimsudo nanogksudo 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 
  2. 安装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 

    其中8B48AD62469255537638D0442B90D010应与您在警告消息中看到的pubkeys相匹配。

  3. 添加所需的存储库:

     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)存储库对依赖版本更宽松。

  4. 更新apt缓存(由于Debian的软件包列表很大,所以需要一段时间):

     sudo apt update 
  5. 安装openjdk-7-jdk:

     sudo apt install openjdk-7-jdk 
  6. 更新java替代品。 您可以使用update-java-alternatives --list查看所有已安装的Java版本。 要激活OpenJDK Java 1.7,请运行:

     sudo update-java-alternatives -s java-1.7.0-openjdk-amd64 

    您可能会注意到有关IcedTeaPlugin.so插件不可用的错误。 对于使用JDK的开发人员来说,这不是一个真正的问题。

  7. 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及更早版本libfontconfig1fontconfig-config升级到2.12或更高版本。 Debian的更新包不包含Ubuntu的自定义,因此一些应用程序显示安装了这些包的丑陋字体; 例如Charles Web Debugging Proxy。 根据您使用的程序,您可能会或可能不会受此问题的影响。

您可以从Azul下载OpenJDK 7,它可能满足您的需求。 它们都有DEB(用于包装系统)和ZIP分发。 我只使用ZIP发行版。

http://www.azul.com/downloads/zulu/zulu-linux/

在Ubuntu 16.04,Ubuntu 17.04上安装Java 7

建议安装Oracle Java ,因为它比OpenJDK具有更高的性能。 出于这个原因,我想发布一个替代方案。 如果要安装Oracle Java,请在终端中运行以下命令以从PPA安装它。

  1. 添加所需的存储库:

     sudo add-apt-repository ppa:webupd8team/java 
  2. 更新apt缓存并安装oracle-java7

     sudo apt update sudo apt install java-common oracle-java7-installer 

    在安装过程中,您需要接受Oracle许可协议。 安装完成后,我们需要设置Java环境变量,例如JAVA_HOME

  3. 更正Java环境变量。

     sudo apt install oracle-java7-set-default source /etc/profile 
  4. 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示例

  1. 安装Docker – Docker CE免费版很好。 请参阅https://docs.docker.com/install/linux/docker-ce/ubuntu/,或在最近发布的Ubuntu版本中使用docker.io软件包。

  2. 在空文件夹中,创建一个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"] 

    如果需要,在该命令中添加更多包。

  3. 在该文件夹中,运行:

     docker build -t gertvdijk/java7 . 
  4. 使用该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) 
  5. (可选)创建包装以方便使用。

    • 使用内容创建文件/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 
  6. 透明地运行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软件包)不会删除它们。

注意 :使用此方法作为最后的手段,更喜欢任何其他允许您更新而没有问题的方法。