经过大量的谷歌搜索,我在
Ubuntu论坛上找到了答案。
基本上,问题似乎是由于有一个新的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,请点击此处,点击“Downloads”选项卡,然后点击“Java SE 8u181”链接)。
现在,根据您的机器查找所需的JDK版本。在我的情况下,我的机器运行在Ubuntu 14.04 64位上,因此我需要“Linux x64”。
![JDK versions](https://istack.dev59.com/zBeTG.webp)
复制带您到所需下载的链接。不要忘记接受许可协议。在我的情况下(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/
。保持它的安全性;我们稍后会需要它。
现在在页面中查找校验和链接并点击它。
![Checksum link](https://istack.dev59.com/bscvo.webp)
这应该会带您到一个普通的html表格页面。只需查找适合您机器的sha256
。
![Linux x64 SHA](https://istack.dev59.com/WkSzR.webp)
再次提醒,我的机器是"Linux x64",所以我需要像图片中一样的
1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3
。复制这个值并妥善保管;之后我们还会用到它。
现在,在您的机器上打开终端并进入Java安装程序文件所在的文件夹。
cd /var/lib/dpkg/info
太好了,现在执行以下命令:
sudo grep --color -P "JAVA_VERSION=[a-z0-9]+" oracle-java8-installer.config
输出结果应该类似于这样:
![Installer's java version](https://istack.dev59.com/9lSwS.webp)
这告诉我们安装程序配置的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
![安装程序的合作伙伴 URL](https://istack.dev59.com/QyEt9.webp)
要更新它,我们需要执行类似于这样的命令:
sudo sed -i 's|PARTNER_URL=<INSTALLER CURRENT JAVA URL HERE>|PARTNER_URL=<NEW URL HERE>|' oracle-java8-installer.*
记得我在一开始告诉你要保存的URL吗?现在我们需要它。将它作为您的新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:
![Installer's SHA256s](https://istack.dev59.com/AvCW2.webp)
请注意它们都是不同的。我们稍后会回到这个问题。所以,要更新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
在我的情况下,这样打印出来:
![Installer's JDK folder name](https://istack.dev59.com/zaqi4.webp)
因此,我们需要执行类似于以下内容的操作:
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安装程序了,耶!(呼...这比我一开始想的要花更长时间打字)。
webupd80的修复: - Albert Zhong