问题描述
从昨天开始,我一直试图在我的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。
最佳办法
经过大量搜索之后,我在the Ubuntu forum上找到了答案。
基本上,问题似乎是存在一个新版本的java,并且未更新安装程序以引用它。
如果您的计算机是带有AMD64处理器的Linux x64,则需要最新的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,单击”Downloads” tab,然后单击“ Java SE 8u181” link)。
现在,根据您的计算机查找所需的JDK版本。就我而言,我的机器在64位Ubuntu 14.04上运行,因此我需要“ 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.*
还记得我刚告诉过您保存的网址吗?好吧,我们现在需要它。将其作为您的新网址,如下所示:
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
),因此请相信我:
-
如果您的体系结构是
i386
,i586
或i686
,请抓住第一个。 -
如果是
amd64
,请抓住第二个。 -
如果是
armv7l
或armv6l
,请抓住第三个。 -
如果是
armv8l
,arm64
或aarch64
,请抓住第四个。 -
如果以上都不是,那么您真不走运。
因此,由于我的名字是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安装程序了。 (phe …这花了我一开始想的时间更长)。
次佳办法
感谢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.*
第三种办法
甲骨文从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.*
第四种办法
以下是我对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进行标题调整。
第五种办法
由于几天前,由于新的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.*
第六种办法
对于2019年4月16日所做的更新更改,对于AMD64上的Linux x64从8u201
到8u211
的情况,请添加以下内容:
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
第七种办法
这是针对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.*
第八种办法
以及较新的版本:
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.*