如何在Ubuntu 16.04或更高版本上安装openjdk 7?


120

我想将主系统升级到16.04,但是我在需要OpenJDK 7的项目上工作。

显然,它是不可用的apt-get install openjdk-7-jdk。存储库中仅列出版本8和9。

谁能指出我的安装说明?


如果有人想知道为什么您仍然想要JDK 7,我也会遇到同样的情况,因为我认为neo4j 2.1.6在Ubuntu 16.04上不能很好地工作,而我唯一看到的可能就是JDK。
Sridhar Sarnobat '16

您是否明确要求将openjdk 7作为系统JVM,或者仅需要Java 7运行时。您可以从Oracle归档文件中下载后者。
托尔比约恩Ravn的安徒生

Answers:


146

安全警告

下文提到的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(受限制)”定义为附加的软件包存储库,更新您的信息,并从其存储库中安装具有其依赖项的软件包。


13
如果您像我一样错误地首先安装了openjdk-8,那么在遵循此答案之后,您将需要执行操作a,sudo update-java-alternatives以便可以将openjdk-7设置为默认值。
瑞安·桑德森

4
仅供参考:目前不适用于16.10
最佳循环时间

19
-1,因为此PPA完全过时并且忽略了许多重要的安全补丁。安装imo完全不可接受。
gertvdijk

3
也不适用于17.04。
科林·哈灵顿

2
就像PPA建议的-1一样,它是“受限制的”,并且不是最新的。
定界符

65

编辑22-七月-2019:当前答案不起作用。以下引用的JDK软件包在Debian Experiment上不再可用。无论如何,它们落后于包含更多最新安全更新的Ubuntu Trusty软件包。请参阅其他答案,直到可以解决为止(抱歉,没有ETA)。


看起来openjdk-r / ppa的维护者不会更新版本7u95-2.6.4-3之后的openjdk-7软件包。该软件包的描述“是从Debian GNU / Linux的主要档案库中的debian实验复制而来的”为我们提供了一个有关如何自行处理的线索。

选项1:手动安装

  1. 下载适合您的体系结构的软件包:(
    对于大多数用户,这意味着如果是64位,则为amd64;如果已安装32位的Ubuntu,则为i386)

  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-headless:amd64
    openjdk-7-jdk:amd64

    如果没有依赖关系问题,那么很好,您就可以完成,跳到#4。否则,如果您需要解决某些依赖性问题,则可以通过以下方法处理:

    sudo apt install -f

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

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

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

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

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

  1. 创建一个固定文件,告知apt仅考虑我们感兴趣的软件包(我们当然不希望我们的整个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密钥环的最简单方法,但它可能不是最新的。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
    

    其中,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稳定版无法满足的依赖关系。实验性(对于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替代品。您可以使用来查看所有已安装的Java版本update-java-alternatives --list。要激活OpenJDK Java 1.7,请运行:

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

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

  7. 验证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调试代理。根据您使用的程序,您可能会或可能不会受到此问题的影响。


有趣的答案,如果您找到使此软件包自动更新的方法,请对其进行更新。
J.Serra

我只是尝试在ubuntu 16.04上安装jdk 7,这是我设法使其正常工作的唯一方法。谢谢!
链接

2
@ J.Serra答案使用自动更新方法进行了修订。
MDMower

完美回答,尤其是自动方法,受到高度赞赏!感谢takin抽出宝贵的时间写下来!
steadfasterX

1
自动方法最适合我,但也不是完全永久的。我不得不在/etc/apt/preferences.d/debian中添加两个软件包(除了libjpeg62-turbo之外):libfontconfig1和fontconfig-config
comodoro


0

在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. 验证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)

3
oracle安装程序不再起作用连接到download.oracle.com(download.oracle.com)| 184.51.150.144 |:80 ...已连接。HTTP请求已发送,正在等待响应...找不到404
自治权

对于Oracle JDK,该公司不提供对JDK 7的公共支持(它们提供付费支持)。我认为apt-get试图从不存在的页面获取安装程序。-如果您需要JDK 7,则可以从存档网站下载安装程序:oracle.com/technetwork/java/javase/downloads/…–
Jaime,

0

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月之后将不再公开更新。


0

使用容器

这是关于如何<outdated><current>Ubuntu 上运行已删除软件的普遍有效答案:容器化您的应用程序

例如,使用Docker和一个较旧的Ubuntu基本映像,您正在寻找的软件仍然可用/维护。

反之亦然。在您当前正在运行的稳定Ubuntu上,在更新甚至其他Linux发行版上试用该软件。

使用Ubuntu 14.04的Java 7示例

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

  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

除非您为扩展维护付费(直到2022年),否则不再维护14.04。
托尔比约恩Ravn的安德森

-2

一种简单的方法是:

将这些行添加到/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软件包)时不会将其删除。

注意:使用此方法作为最后的选择,请选择其他任何可以使您毫无问题地进行更新的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.