cav*_*llo 43 java ubuntu java-8
从昨天起,我一直在尝试在我的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
Run Code Online (Sandbox Code Playgroud)
但是我无法继续,因为在运行命令时,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
...
Run Code Online (Sandbox Code Playgroud)
我的安装程序是64位Ubuntu 14.04.
cav*_*llo 87
经过大量的谷歌搜索后,我在Ubuntu论坛上找到了答案.
基本上,问题似乎是有一个新版本的Java,安装程序没有更新引用它.
如果您的计算机是带有AMD64处理器的Linux x64,并且您需要最新的Java8版本,则可以通过运行这些命令轻松修复(原始版本的信用转到g1zmo2,此更新版本转到@stoneLeaf):
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.*
Run Code Online (Sandbox Code Playgroud)
然后像往常一样运行JDK 8安装程序命令=):
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
Run Code Online (Sandbox Code Playgroud)
如果你的机器是不是一个Linux的x64的AMD64或者你正在寻找Java 9,那么,你是幸运的.今天是您将学习根据自己的需求修复Java安装程序的那一天.
出于本教程的目的,我们假设您需要Java 8u181并且之前已经安装了Java 8u171(因为这就是我所拥有的).
首先,我需要您访问Java的JDK下载页面(对于Java8,请转到此处,单击"下载" 选项卡,然后单击"Java SE 8u181" 链接).
现在,根据您的计算机查找所需的JDK版本.就我而言,我的机器运行在64位Ubuntu 14.04上,所以我需要"Linux x64".
复制链接,将您带到所需的下载.不要忘记接受许可协议.就我而言(Linux x64),我需要:8u212.
出于本教程的目的,我们只需要链接的路径:8u212.保持安全; 我们以后会需要的.
现在查看页面中的校验和链接并单击它.
这应该会带你到一个简单的html表页面.只需寻找http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz适合您机器的产品.
同样,我的机器是一个"Linux x64"所以我需要http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/,就像在图片中一样.复制该值,并保持安全; 我们以后也需要它.
现在,打开计算机上的终端并输入java安装程序文件所在的文件夹:
cd /var/lib/dpkg/info
Run Code Online (Sandbox Code Playgroud)
好的,现在执行这个:
sudo grep --color -P "JAVA_VERSION=[a-z0-9]+" oracle-java8-installer.config
Run Code Online (Sandbox Code Playgroud)
输出应该如下所示:
这告诉我们安装程序配置为安装的java版本是什么.因此,要轻松更改这些值,我们将运行以下内容:
sudo sed -i 's|JAVA_VERSION=<INSTALLER CURRENT JAVA VERSION HERE>|JAVA_VERSION=<NEW VERSION HERE>|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
对于我们的情况,我们正在升级sha256到1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3,所以我们将执行:
sudo sed -i 's|JAVA_VERSION=8u171|JAVA_VERSION=8u181|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
好的,现在我们需要更新下载URL.
sudo grep --color -P "PARTNER_URL=[^ ]+" oracle-java8-installer.config
Run Code Online (Sandbox Code Playgroud)
要更新它,我们应该执行如下命令:
sudo sed -i 's|PARTNER_URL=<INSTALLER CURRENT JAVA URL HERE>|PARTNER_URL=<NEW URL HERE>|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
还记得我告诉你在开始时保存的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.*
Run Code Online (Sandbox Code Playgroud)
之后,我们需要更新校验和.所以请执行此命令:
sudo grep --color -P '[^#]SHA256SUM_TGZ="[^"]+"' oracle-java8-installer.config
Run Code Online (Sandbox Code Playgroud)
这打印出几个不同的SHA256:
请注意,它们都是不同的.我们会在一秒钟内回过头来看看.因此,要更新SHA256,我们需要执行以下命令:
sudo sed -i 's|SHA256SUM_TGZ="<INSTALLER CURRENT JAVA HASH HERE>"|SHA256SUM_TGZ="<NEW JAVA HASH>"|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
但是我们如何知道当前哪些Java哈希要替换?好吧,我们需要找出我们处理器的架构:
dpkg --print-architecture
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这将输出8u171.这意味着我应该抓住第二个链接.我怎么知道这个?好吧,我读了源代码(8u181),所以请相信我:
amd64,sudo gedit oracle-java8-installer.config或者i386抓住第一个.i586,抓住第二个.i686或amd64,抓住第三个.armv7l,armv6l或者armv8l,抓住第四个.因此,正如我的arm64,使用从Java的网站获得的新哈希,我将执行:
sudo sed -i 's|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|SHA256SUM_TGZ="1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3"|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
最后,我们需要修改安装程序JDK目录名,因此执行此命令以查找当前的名称:
sudo grep --color -P "J_DIR=[^ ]+" oracle-java8-installer.config
Run Code Online (Sandbox Code Playgroud)
在我的情况下这打印:
所以我们会执行这样的事情:
sudo sed -i 's|J_DIR=<INSTALLER CURRENT JDK VERSION HERE>|J_DIR=<NEW JDK VERSION>|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
作为我当前的版本aarch64,我执行:
sudo sed -i 's|J_DIR=jdk1.8.0_171|J_DIR=jdk1.8.0_181|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
而且......就是这样.我们已经准备好调用java安装程序了.(phew ...这种打字花了更长的时间才开始考虑).
Edit5 @ MinneapolisCoder9旧版本从使用的命令amd64来jdk1.8.0_171(如果它来得心应手给任何人,虽然它应该已经有新的版本文件删除)
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.*
Run Code Online (Sandbox Code Playgroud)
Edit4 @Glenn史密斯旧版本从使用的命令8u212来8u212(如果它来得心应手给任何人,虽然它应该已经有新的版本文件删除)
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
Run Code Online (Sandbox Code Playgroud)
EDIT3 @Kenny洪老版本从使用的命令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/(如果它来得心应手给任何人,虽然它应该已经有新的版本文件删除)
cd /var/lib/dpkg/info
Run Code Online (Sandbox Code Playgroud)
EDIT2 @马丁Šuráb/ @艾伯特忠/ P-安塞尔的旧版本从使用的命令sha256来1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3(如果它来得心应手给任何人,虽然它应该已经有新的版本文件删除)
sudo grep --color -P "JAVA_VERSION=[a-z0-9]+" oracle-java8-installer.config
Run Code Online (Sandbox Code Playgroud)
EDIT1 G1zmo2的从使用的命令的旧版本8u171,以8u181(在此情况,方便到任何人,但它应该已经有新的版本文件删除):
sudo sed -i 's|JAVA_VERSION=<INSTALLER CURRENT JAVA VERSION HERE>|JAVA_VERSION=<NEW VERSION HERE>|' oracle-java8-installer.*
Run Code Online (Sandbox Code Playgroud)
Alb*_*ong 10
感谢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.*
Run Code Online (Sandbox Code Playgroud)
今天点击这个,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.*
Run Code Online (Sandbox Code Playgroud)
以下是我对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
Run Code Online (Sandbox Code Playgroud)
归功于数字海洋的头部调整.
小智 6
几天前,由于新的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.*
Run Code Online (Sandbox Code Playgroud)
对于更新变化对取得2019年4月16日,对于Linux的x64的对AMD64从去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.*
Run Code Online (Sandbox Code Playgroud)
就我而言,我不需要使用,sudo但是为了与此处的其他响应保持一致,我将其保留。
感谢@cavpollo