【问题标题】:JDK 8 is NOT installed - ERROR 404: Not Found未安装 JDK 8 - 错误 404:未找到
【发布时间】:2017-10-18 17:26:53
【问题描述】:

从昨天开始,我一直在尝试在我的 Ubuntu 机器上安装 JDK8,但一直失败。

我一直在尝试运行命令:

sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default

但我无法继续,因为在运行命令 sudo apt-get install oracle-java8-installer 时,我得到的只是:

...
Connecting to download.oracle.com (download.oracle.com)|23.215.130.99|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-10-18 11:07:34 ERROR 404: Not Found.

download failed
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
 subprocess installed post-installation script returned error exit status 1
...

我的安装程序是 64 位 Ubuntu 14.04。

【问题讨论】:

    标签: java ubuntu java-8


    【解决方案1】:

    对于最新版本 (jdk-8u211-linux-x64.tar.gz),您可能会收到 HTTP '401 Authorization Required'。 我对这个问题的解决方法如下。

    1. 去官网下载jdk-8u211-linux-x64.tar.gz(here),下载文件前需要注册账号。
    2. 安装apache2搭建Http服务器。

      sudo apt-get install apache2
      
    3. 将刚刚下载的文件移动到/var/www/html文件夹,因为服务器默认根目录是/var/www/html。现在可以通过url下载文件了(如http://localhost/jdk-8u211-linux-x64.tar.gz)。

    4. 更新 oracle-java8-installer。

      cd /var/lib/dpkg/info
      sudo sed -i 's|JAVA_VERSION=8u201|JAVA_VERSION=8u211|' oracle-java8-installer.*
      sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/|PARTNER_URL=http://localhost/|' oracle-java8-installer.*
      sudo sed -i 's|SHA256SUM_TGZ="cb700cc0ac3ddc728a567c350881ce7e25118eaf7ca97ca9705d4580c506e370"|SHA256SUM_TGZ="c0b7e45330c3f79750c89de6ee0d949ed4af946849592154874d22abc9c4668d"|' oracle-java8-installer.*
      sudo sed -i 's|J_DIR=jdk1.8.0_201|J_DIR=jdk1.8.0_211|' oracle-java8-installer.*
      

    【讨论】:

      【解决方案2】:

      经过大量谷歌搜索后,我在 the Ubuntu forum 上找到了答案。

      基本上,问题似乎是有一个新版本的java并且安装程序没有更新以引用它。

      如果您的机器是 Linux x64AMD64 处理器,您需要最新的 Java8 版本,并且您之前安装的版本为 8u212,这可以轻松解决通过运行这些命令(原始版本的信用转到g1zmo2):

      cd /var/lib/dpkg/info
      sudo sed -i 's|JAVA_VERSION=8u212|JAVA_VERSION=8u221|' oracle-java8-installer.*
      sudo sed -i 's|PARTNER_URL=https://download.oracle.com/otn/java/jdk/8u212-b10/59066701cf1a433da9770636fbc4c9aa/|PARTNER_URL=https://download.oracle.com/otn/java/jdk/8u221-b11/230deb18db3e4014bb8e3e8324f81b43/|' oracle-java8-installer.*
      sudo sed -i 's|SHA256SUM_TGZ=.*|SHA256SUM_TGZ="15ad4f7260d2416ac1558341d9d0a0ec5b83904e4ac4a22c8a3242e4e217649b"|' oracle-java8-installer.*
      sudo sed -i 's|J_DIR=jdk1.8.0_212|J_DIR=jdk1.8.0_2221|' oracle-java8-installer.*
      

      然后像往常一样运行 JDK 8 安装程序命令 =):

      sudo apt-get update
      sudo apt-get install oracle-java8-installer
      sudo apt-get install oracle-java8-set-default
      

      如果您的机器不是 Linux x64 AMD64,那么您之前的版本不是8u212您正在寻找Java 9 , 好吧,你是幸运的。今天是您学习根据自己的需要修复 java 安装程序的日子。

      出于本教程的目的,我们假设您需要 Java 8u181,并且您之前已经安装了 Java 8u171(因为这就是我所拥有的)。

      首先,我需要您访问 Java 的 JDK 下载页面(对于 Java8,go here,单击“下载”tab,然后单击“Java SE 8u181”link)。

      现在,根据您的机器查找您需要的 JDK 版本。就我而言,我的机器在 Ubuntu 14.04 64 位上运行,所以我需要“Linux x64”。

      复制带您到所需下载的链接。不要忘记接受许可协议。在我的情况下(Linux x64),我需要:http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz

      就本教程而言,我们只需要链接的路径:http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/。保持安全;我们稍后会用到它。

      现在查找页面中的校验和链接和click it

      这应该带你到一个普通的 html 表格页面。只需寻找适合您机器的sha256

      同样,我的机器是“Linux x64”,所以我需要1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3,如图所示。复制该值,并妥善保管;我们稍后也会需要它。

      现在,在你的机器上打开一个终端并进入 java 安装文件所在的文件夹:

      cd /var/lib/dpkg/info
      

      很好,现在执行这个:

      sudo grep --color -P "JAVA_VERSION=[a-z0-9]+" oracle-java8-installer.config
      

      输出应该是这样的:

      这告诉我们安装程序配置安装的 java 版本是什么。因此,要轻松更改这些值,我们将运行如下代码:

      sudo sed -i 's|JAVA_VERSION=<INSTALLER CURRENT JAVA VERSION HERE>|JAVA_VERSION=<NEW VERSION HERE>|' oracle-java8-installer.*
      

      对于我们的例子,我们从8u171升级到8u181,所以我们会执行:

      sudo sed -i 's|JAVA_VERSION=8u171|JAVA_VERSION=8u181|' oracle-java8-installer.*
      

      好的,现在我们需要更新下载地址。

      sudo grep --color -P "PARTNER_URL=[^ ]+" oracle-java8-installer.config
      

      要更新它,我们应该执行如下命令:

      sudo sed -i 's|PARTNER_URL=<INSTALLER CURRENT JAVA URL HERE>|PARTNER_URL=<NEW URL HERE>|' oracle-java8-installer.*
      

      还记得我在开始时告诉你要保存的那个 URL 吗?好吧,我们现在需要它。将其作为您的新网址,如下所示:

      sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/|' oracle-java8-installer.*
      

      之后,我们需要更新校验和。所以请执行这个命令:

      sudo grep --color -P '[^#]SHA256SUM_TGZ="[^"]+"' oracle-java8-installer.config
      

      这会打印出几个不同的 SHA256:

      请注意,它们都是不同的。我们稍后再谈。因此,要更新 SHA256,我们需要执行以下命令:

      sudo sed -i 's|SHA256SUM_TGZ="<INSTALLER CURRENT JAVA HASH HERE>"|SHA256SUM_TGZ="<NEW JAVA HASH>"|' oracle-java8-installer.*
      

      但是我们如何知道要替换哪些当前的 Java 哈希?好吧,我们需要找出我们处理器的架构:

      dpkg --print-architecture
      

      就我而言,这将输出amd64。这意味着我应该抓住第二个链接。我怎么知道这个?好吧,我阅读了源代码 (sudo gedit oracle-java8-installer.config),所以请相信我:

      • 如果您的架构是 i386i586i686,请选择第一个。
      • 如果是amd64,请抓第二个。
      • 如果是armv7larmv6l,请抓第三个。
      • 如果是armv8larm64aarch64,则选择第四个。
      • 如果以上都不是,那你就不走运了...

      所以,因为我是amd64,使用我们从 Java 网站获得的新哈希,我会执行:

      sudo sed -i 's|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|SHA256SUM_TGZ="1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3"|' oracle-java8-installer.*
      

      最后,我们需要修改安装程序的JDK目录名,所以执行这个找到当前的:

      sudo grep --color -P "J_DIR=[^ ]+" oracle-java8-installer.config
      

      在我的例子中是这样打印的:

      所以我们会执行如下操作:

      sudo sed -i 's|J_DIR=<INSTALLER CURRENT JDK VERSION HERE>|J_DIR=<NEW JDK VERSION>|' oracle-java8-installer.*
      

      作为我当前的版本jdk1.8.0_171,我执行:

      sudo sed -i 's|J_DIR=jdk1.8.0_171|J_DIR=jdk1.8.0_181|' oracle-java8-installer.*
      

      然后……就是这样。我们已经准备好调用 java 安装程序了,是的。 (呼……这比我一开始想的要花更长的时间)。

      【讨论】:

      • 修复 8u151-1~webupd8~0:
      • java 8u161 似乎又过时了(未找到 404),有人有更新的修复吗?
      • 是的,糟透了 =\ 我可以编写一个指南来手动完成 =),但有时一个只是 Linux 新手(不久前我曾经是一个),并且复制粘贴命令真的 有很大帮助。我会两全其美,谢谢你的建议。 =)
      • @GeorgeV.M.已经完成了^_^如果您有任何其他建议,请告诉我
      • 我无法让它同时适用于 8u211 和 8u212。我注意到下载 url 现在使用 https 和 otn 而不是 otn-pub。尝试只是给出未经授权的而不是找不到。我不认为最近的许可证更改是一个因素?
      【解决方案3】:

      对于 2019 年 4 月 16 日所做的更新更改,对于 AMD64 上的 Linux x648u2018u211 添加以下:

      cd /var/lib/dpkg/info
      sudo sed -i 's|JAVA_VERSION=8u201|JAVA_VERSION=8u211|' oracle-java8-installer.*
      sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/|PARTNER_URL=https://download.oracle.com/otn/java/jdk/8u211-b12/478a62b7d4e34b78b671c754eaaf38ab/|' oracle-java8-installer.*
      sudo sed -i 's|SHA256SUM_TGZ="cb700cc0ac3ddc728a567c350881ce7e25118eaf7ca97ca9705d4580c506e370"|SHA256SUM_TGZ="c0b7e45330c3f79750c89de6ee0d949ed4af946849592154874d22abc9c4668d"|' oracle-java8-installer.*
      sudo sed -i 's|J_DIR=jdk1.8.0_201|J_DIR=jdk1.8.0_211|' oracle-java8-installer.*
      

      就我而言,我不需要使用sudo,但为了与此处的其他回复保持一致,我将其保留。

      感谢@cavpollo

      【讨论】:

      • 自己来到了这组命令。试过你的,但在这两种情况下我都得到了一个 HTTP '401 Authorization Required'。
      • 我在这里,2019 年 4 月 17 日。这些不可靠的安装程序是错误的。这对他们来说太鲁莽了。地球的一半依赖于此。吸取教训,备份一切。
      • 怀疑 401 是因为 8u211 是第一个只付费的版本。之前的 8u201 是最后一个免费提供的版本。在我看来,8u201 版本引用的 tarball 似乎已从 Oracle 的服务器中删除?
      • 我正在尝试将此添加到我的 dockerfile 但我不断收到此错误sed: can't read oracle-java8-installer.*: No such file or directory。对此有任何想法吗?
      • 我最终将 8u202 .tar.gz 存储在 S3 中,并将 sed 命令更改为指向其在公共 S3 存储桶中的位置,这样就可以正常工作。
      【解决方案4】:

      今天,Oracle 从 8u181 迁移到 8u191,实现了这一目标。按照@cavpollo 的步骤,让它为我的东西工作,这里是 181 到 191 的修复,以防万一有人需要它:

      cd /var/lib/dpkg/info
      sudo sed -i 's|JAVA_VERSION=8u181|JAVA_VERSION=8u191|' oracle-java8-installer.*
      sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/|' oracle-java8-installer.*
      sudo sed -i 's|SHA256SUM_TGZ="1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3"|SHA256SUM_TGZ="53c29507e2405a7ffdbba627e6d64856089b094867479edc5ede4105c1da0d65"|' oracle-java8-installer.*
      sudo sed -i 's|J_DIR=jdk1.8.0_181|J_DIR=jdk1.8.0_191|' oracle-java8-installer.*
      

      【讨论】:

      • 感谢这个更新版本。很高兴知道本教程对您有用 =)
      • 是的,效果很好,非常感谢您制作了如此有据可查的教程!
      【解决方案5】:

      这里适用于 Java 8u181,因为 8u171 不再工作:

      cd /var/lib/dpkg/info
      sed -i 's|JAVA_VERSION=8u171|JAVA_VERSION=8u181|' oracle-java8-installer.*
      sed -i 's|J_DIR=jdk1.8.0_171|J_DIR=jdk1.8.0_181|' oracle-java8-installer.*
      sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/|' oracle-java8-installer.*
      sed -i 's|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|SHA256SUM_TGZ="1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3"|' oracle-java8-installer.*
      

      【讨论】:

      • 感谢更新版本,我已经更新了原始答案以包含它=)
      【解决方案6】:

      添加到@cavpollo 的答案,对于那些使用 Ansible 的人,这个任务会让你到达那里

      - name: Patch Java installer
        shell: "{{ item }}"
        args:
          chdir: "/var/lib/dpkg/info"
        become: yes
        with_items:
          - sed -i 's|JAVA_VERSION=8u144|JAVA_VERSION=8u152|' oracle-java8-installer.*
          - sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u152-b16/aa0333dd3019491ca4f6ddbe78cdb6d0/|' oracle-java8-installer.*
          - sed -i 's|SHA256SUM_TGZ="e8a341ce566f32c3d06f6d0f0eeea9a0f434f538d22af949ae58bc86f2eeaae4"|SHA256SUM_TGZ="218b3b340c3f6d05d940b817d0270dfe0cfd657a636bad074dcabe0c111961bf"|' oracle-java8-installer.*
          - sed -i 's|J_DIR=jdk1.8.0_144|J_DIR=jdk1.8.0_152|' oracle-java8-installer.*
      

      【讨论】:

        【解决方案7】:

        还有一个更新的版本:

        cd /var/lib/dpkg/info
        sudo sed -i 's|JAVA_VERSION=8u161|JAVA_VERSION=8u171|' oracle-java8-installer.*
        sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/|' oracle-java8-installer.*
        sudo sed -i 's|SHA256SUM_TGZ="6dbc56a0e3310b69e91bb64db63a485bd7b6a8083f08e48047276380a0e2021e"|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|' oracle-java8-installer.*
        sudo sed -i 's|J_DIR=jdk1.8.0_161|J_DIR=jdk1.8.0_171|' oracle-java8-installer.*
        

        【讨论】:

        • 感谢更新版本,我已经更新了原始答案以包含它=)
        • 太棒了。如果这将成为一种常见的事情,我们可能应该记录如何产生这些哈希值。
        • 这是个好主意。您可以在 SO 上提出自己的问题并回答。我会从这个问题链接到它=)
        【解决方案8】:

        感谢 cavpollo 对 JDK 8u141 的回答。

        我将修复 JDK 8u151-1~webupd8~0(改用 JDK 8i162):

        cd /var/lib/dpkg/info
        sudo sed -i 's|JAVA_VERSION=8u151|JAVA_VERSION=8u162|' oracle-java8-installer.*
        sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/|' oracle-java8-installer.*
        sudo sed -i 's|SHA256SUM_TGZ="c78200ce409367b296ec39be4427f020e2c585470c4eed01021feada576f027f"|SHA256SUM_TGZ="68ec82d47fd9c2b8eb84225b6db398a72008285fafc98631b1ff8d2229680257"|' oracle-java8-installer.*
        sudo sed -i 's|J_DIR=jdk1.8.0_151|J_DIR=jdk1.8.0_162|' oracle-java8-installer.*
        

        【讨论】:

          【解决方案9】:

          跟大家分享一下JDK版本8u172的更新

          sudo sed -i 's|JAVA_VERSION=8u161|JAVA_VERSION=8u172|' oracle-java8-installer.*
          sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/|' oracle-java8-installer.*
          sudo sed -i 's|SHA256SUM_TGZ="6dbc56a0e3310b69e91bb64db63a485bd7b6a8083f08e48047276380a0e2021e"|SHA256SUM_TGZ="28a00b9400b6913563553e09e8024c286b506d8523334c93ddec6c9ec7e9d346"|' oracle-java8-installer.*
          sudo sed -i 's|J_DIR=jdk1.8.0_161|J_DIR=jdk1.8.0_172|' oracle-java8-installer.*
          

          【讨论】:

          • 感谢更新版本,我已经更新了原始答案以包含它=)
          • 根据@Pavlo,这只是安装版本 8u171。自己在8u171版本上测试过,没有更新。
          • 抱歉,cavpollo,这是因为“WebUpd8”团队在几个小时前将版本从 8u161 更新到了 8u171。这将不再正确地替换字符串。这是昨天错误的补丁,无论如何我认为你可以使用@kenny-hung 发布的 8u171 SHA 和 URL,而不是 8u161 版本。 =)
          【解决方案10】:

          从几天前开始,由于新的 Java 版本,此解决方法已过时。相反,请使用此替换:

          sed -i 's|JAVA_VERSION=8u151|JAVA_VERSION=8u162|' oracle-java8-installer.*
          sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/|' oracle-java8-installer.*
          sed -i 's|SHA256SUM_TGZ="c78200ce409367b296ec39be4427f020e2c585470c4eed01021feada576f027f"|SHA256SUM_TGZ="68ec82d47fd9c2b8eb84225b6db398a72008285fafc98631b1ff8d2229680257"|' oracle-java8-installer.*
          sed -i 's|J_DIR=jdk1.8.0_151|J_DIR=jdk1.8.0_162|' oracle-java8-installer.*
          

          【讨论】:

          • 谢谢。星期五我在这里工作很晚,因为我的 ansible Web 服务器部署手册无法再在主机上安装 java,因为甲骨文可能不会让供应商重新分发他们甚至不收费的二进制文件。好像没有足够的理由切换到开源替代品。
          【解决方案11】:
          【解决方案12】:

          用于下载 java 8 的 URL 中缺少 .gz 上方。 wget --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u152-b16/aa0333dd3019491ca4f6ddbe78cdb6d0/jdk-8u152-linux-x64.tar.gz

          【讨论】:

            【解决方案13】:

            以下是我针对 Ubuntu Mate 16.04 x64 的解决方法:

            wget --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u152-b16/aa0333dd3019491ca4f6ddbe78cdb6d0/jdk-8u152-linux-x64.tar.gz
            
            mkdir /opt/jdk
            
            sudo tar -zxf jdk-8u152-linux-x64.tar.gz -C /opt/jdk
            
            update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.8.0_152/bin/java 100
            
            update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk1.8.0_152/bin/javac 100
            

            感谢digital ocean 调整标题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-27
              • 1970-01-01
              • 2021-08-06
              相关资源
              最近更新 更多