经过大量谷歌搜索后,我在 the Ubuntu forum 上找到了答案。
基本上,问题似乎是有一个新版本的java并且安装程序没有更新以引用它。
如果您的机器是 Linux x64 和 AMD64 处理器,您需要最新的 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),所以请相信我:
- 如果您的架构是
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 安装程序了,是的。 (呼……这比我一开始想的要花更长的时间)。