在Linux上通过wget下载Java JDK时,显示许可证页面而非下载页面

646

当我尝试从Oracle下载Java时,我却下载了一个页面,告诉我我需要同意OTN许可条款。

抱歉!

为了从Oracle技术网络下载产品,您必须同意OTN许可条款。

请确保...

  • 您的浏览器已启用“cookies”和JavaScript。
  • 您已点击“接受许可”以下载所需产品。
  • 您在接受许可证后30分钟内尝试下载。

我该如何下载和安装Java?

30个回答

1721

截至2021年12月23日,适用于JDK 17

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/java/17/archive/jdk-17.0.1_linux-x64_bin.rpm

截至2021年7月27日,适用于JDK 16

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/16.0.2%2B7/d4a915d82b4c4fbb9bde534da945d746/jdk-16.0.2_linux-x64_bin.rpm

截至2020年11月5日,适用于JDK 15

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/15.0.1+9/51f4f36ad4ef43e39d0dfdbaf6549e32/jdk-15.0.1_linux-x64_bin.rpm

截至2020年7月11日,适用于JDK 14

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/14.0.1+7/664493ef4a6946b186ff29eb326336a2/jdk-14.0.1_linux-x64_bin.rpm -O ~/Downloads/jdk-14.0.1_linux-x64_bin.rpm

PS:Alf加了这个(我):-) ,我没想到怎么只在最后添加评论...享受它吧。

更新为Oracle JDK 11

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/11+28/55eed80b163941c8885ad9298e6d786a/jdk-11_linux-x64_bin.tar.gz

已更新至JDK 10.0.2

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.tar.gz

更新至JDK 10.0.1

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/10.0.1+10/fb4372174a714e6b8c52526dc134031e/jdk-10.0.1_linux-x64_bin.tar.gz

JDK 9更新 看起来现在可以直接从java.net下载它,无需发送头文件。

wget http://download.java.net/java/GA/jdk9/9/binaries/jdk-9+181_linux-x64_bin.tar.gz

针对JDK 8u191进行更新

TAR GZ:

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3a%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk8-downloads-2133151.html; oraclelicense=accept-securebackup-cookie;" "https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz"

RPM:

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3a%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk8-downloads-2133151.html; oraclelicense=accept-securebackup-cookie;" "https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.rpm"

UPDATED FOR JDK 8u131

RPM:

  wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm

TAR GZ:

 wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

使用curl安装RPM:

 curl -v -j -k -L -H "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm > jdk-8u112-linux-x64.rpm

在上述所有情况中,将“x64”替换为“i586”以下载32位版本。
  • -j -> 忽略cookie
  • -k -> 忽略证书
  • -L -> 跟随重定向
  • -H [arg] -> 请求头

curl可以代替wget

JDK 7u79更新

TAR GZ:

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz

使用curl安装RPM:

curl -v -j -k -L -H "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm > jdk-7u79-linux-x64.rpm

请确保您下载的版本的URL正确。您可以在此处找到URL:Oracle JDK下载站点2012年6月9日原始答案: 如果您想使用wget从命令行下载Oracle JDK,则有一个解决方法。请按以下方式运行wget命令:
wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64.tar.gz"

请确保将下载链接替换为您正在下载的版本的正确链接。


7
一个简单的 --header "Cookie: oraclelicense=accept-securebackup-cookie" (或者 --header "Cookie: oraclelicense=[任意字符(但不能包括空格)]") 看起来可以正常工作。您能否确认一下? - Det
4
更新 Java 8 的最新版本命令如下:wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8-b132/jdk-8-linux-x64.tar.gz。其中,_--no-cookies_ 参数是多余的,_--no-check-certificate_ 参数仅在使用没有 SAN 支持(主要是 RHEL/CentOS 6.x)的旧版本 _Wget_(1.12 及之前)时需要。而使用 cURL 命令则为:curl -L -C - -b "oraclelicense=accept-securebackup-cookie" -O http://download.oracle.com/otn-pub/java/jdk/8-b132/jdk-8-linux-x64.tar.gz - Det
3
我尝试了新的121版本,下载链接为http://download.oracle.com/otn-pub/java/jdk/8u121-b13/jdk-8u121-linux-x64.tar.gz,但好像不能运行。你有什么想法吗? - Nam Nguyen
6
使用JDK 11时遇到ERROR 404: Not Found错误,可能是URL不正确? - Tien Dung Tran
8
更新至 Oracle JDK 11 后,之前的解决方案已不再适用。 - bomba
显示剩余27条评论

256

(Irani已经更新了我的答案,但是这里是为了澄清一切。)

编辑:已更新至Java 17.0.1,于2021年10月19日发布

Wget

wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
< p >< em>查看oracle.com中的下载以获取更多信息。

  • -c / --continue

允许继续未完成的下载。

  • --header "Cookie: oraclelicense=accept-securebackup-cookie"

2014年3月15日起,在接受许可协议后向用户提供此cookie,该cookie是访问download.oracle.com中的Java软件包所必需的。在2012年3月27日的第一次实施中使用了cookie gpw_e24=http%3A%2F%2Fwww.oracle.com[...]。这两种情况都没有向公众公开宣布。

值不一定是 "accept-securebackup-cookie"。

不是必需的

  • --no-cookies

组合--no-cookies --header "Cookie: name=value"被提及为“官方”的cookie支持,但在此不是严格要求。

cURL

curl -L -C - -b "oraclelicense=accept-securebackup-cookie" -O https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
  • -L / --location

用于通过所有镜像进行重定向。

  • -C / --continue-at -

请参见上文。cURL需要在末尾加入短横线(-)。

  • -b / --cookie "oraclelicense=accept-securebackup-cookie"

-H / --header“Cookie:…”相同,但也接受文件。

  • -O

用于保存文件(有关更多差异,请参见[作者的比较][8])。


2
“preceding dash”应该是“选项的任何形式后面跟着连字符”,但这个总结非常好。 - Alex Dupuy
1
我把它改成了“_cURL需要在结尾处加上破折号(-)_”。这应该很清楚了,因为命令中已经展示了flag的另一种形式。 - Det
1
我尝试使用下载链接download.oracle.com/otn-pub/java/jdk/8u121-b13/…来安装新的121版本,但好像无法正常工作。有什么想法吗? - Nam Nguyen
1
似乎对于旧版本不起作用。我无法下载8u121。可能是因为“下载这些发行版需要一个oracle.com账户”。有什么解决方法吗? - ALex_hha
1
我们使用Docker,所以需要使用特定版本的Java。是的,我可以在某些FTP上找到该文件,但我刚刚提到从现在开始您无法在没有账户的情况下从该网站下载先前的版本。 - ALex_hha
显示剩余23条评论

39

从命令行下载Java一直很麻烦。我最近一直在使用FireFox(其他浏览器可能也可以)在我的笔记本上开始下载,暂停它(在下载窗口中),使用上下文菜单显示的“复制下载链接”菜单项。然后可以在Linux框中使用此URL下载相同的文件。我预计该URL有短暂的生存期。不太美观,但通常成功。


是的,这很有效。不错。我的URL是http://download.oracle.com/otn-pub/java/jdk/7u9-b05/jdk-7u9-linux-x64.rpm?AuthParam=1353416364_849fe14f5fc48f297de56577ddfea856。 - Mukus
3
这是一个有趣的问题,但并没有回答这个问题。点击 FireFox 与“自动下载”不兼容。 - Stéphane Gourichon
1
今天在我的浏览器中并不像以前那么麻烦(翻译:不可能)。大约完成了10%到20%的下载时,Oracle的服务器会断开连接,导致我只能得到一个截断的下载文件。CLI工具至少可以从上次离开的地方重试,最终其中一个运行将完成而没有超时/拒绝。 - Roboprog
太好了!查询参数 AuthParam 与 Oracle 检查用户是否同意许可证有关。 - asgs
1
今天只有这个解决方案对我有效。上面所有带有接受 cookie 参数的 wget 技巧都不起作用。 - Saad Benbouzid

23

适用于 JDK 8u171 RPM 的更新

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm

以下链接已过时

JDK 8u161 RPM 更新版

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.rpm

适用于JDK 8u152 RPM更新版

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u152-b16/aa0333dd3019491ca4f6ddbe78cdb6d0/jdk-8u152-linux-x64.rpm

已更新至 JDK 8u144 RPM 版本。

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.rpm

已更新为 JDK 8u131 RPM 版本。

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm

更新为JDK 8u121 RPM

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.rpm

这是一个没有文字内容的HTML段落标签内包含了一个被划去的标签,但没有任何实际作用。

2
这绝对帮了我大忙。 为了使用tar.gz,我只需要将.rpm重命名为.tar.gz即可。 - Yoraco Gonzales

19

我知道Oracle尽可能地让他们的Java Runtime和Java SDK变得非常难用。

以下是一些适用于命令行爱好者的指南。

对于类似Debian的系统(在Debian squeeze和Ubuntu 12.x+上测试过)

su -
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
apt-get update
apt-get install --yes oracle-java7-installer
exit

注意:如果您知道更好或更容易的方法,请添加评论,我将更新指南。


2
截至2013年11月2日,其他方法不容易与不同版本进行调整。无论当前版本是什么,这种方法都可以工作,并且可以使用apt-get选项(如“--yes”)自动化/脚本化/无人值守地运行。 - Stéphane Gourichon
尝试使用 --yes,--assume-yes,--force-yes 选项安装 oracle-java8-installer,但每次安装都要求我按回车键接受许可协议。 - Drey

9

在命令行安装不同的JDK有一个很好的替代方案...使用https://sdkman.io/,有很多供应商可供选择。

sdk install java 19.0.1-oracle

1
为什么要使用“--no-check-certificate”?即使没有该开关,它也可以正常工作,因此从安全的角度来看,不应该使用它,特别是当它已经过时了。 - tymik

7

6

如果需要JCE8,您也可以下载它。

curl -L -C - -b "oraclelicense=accept-securebackup-cookie" -O http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip

或者

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip

6

Oracle在下载链接上放置了一个防止cookie,强制您同意条款,即使Java的许可协议明确声明仅通过使用Java就“同意”许可协议。

Oracle希望的方法是您通过同意协议来下载它。之后,可以修改此脚本以适用于您特定的Linux。

#!/bin/bash
#Author: Yucca Nel http://thejarbar.org
#Will restart system
#Modify these variables as needed...
tempWork=/tmp/work
locBin=/usr/local/bin
javaUsrLib=/usr/lib/jvm

sudo mkdir -p $javaUsrLib
mkdir -p $tempWork
cd $tempWork

#Extract the download
tar -zxvf $downloadDir/jdk*tar.gz

#Move it to where it can be found...

sudo mv -f $tempWork/jdk* $javaUsrLib/

sudo ln -f -s $javaUsrLib/jdk1/bin/* /usr/bin/

#Update this line to reflect versions of JDK...
export JAVA_HOME="$javaUsrLib/jdk1.7.0_03"
#Extract the download
tar -zxvf $tempWork/*

#Move it to where it can be found...

sudo mv -f $tempWork/jdk1* $javaUsrLib/

sudo ln -f -s $javaUsrLib/jdk1*/bin/* /usr/bin/
sudo rm -rf $tempWork
#Update this line to reflect newer versions of JDK...
export JAVA_HOME="$javaUsrLib/jdk1.7.0_03"

if ! grep "JAVA_HOME=$javaUsrLib/jdk1.7.0_03" /etc/environment
then
    echo "JAVA_HOME=$javaUsrLib/jdk1.7.0_03"| sudo tee -a /etc/environment
fi


exit 0

1
这个答案假设你使用的是Linux,并且希望以非标准的方式/位置进行安装,以及其他一些事情。更好的答案是“只需按照下载网站上的安装说明进行操作”...除非你使用的是Ubuntu,那么有其他方法可以完成安装。 - Stephen C
9
问题标题包含 Linux,答案假设使用 Linux 怎么会有问题呢?脚本并不是一刀切的,因为 Linux 本身也不是如此。鉴于这是我的问题,并且我已经测试过它可以运行,所以这是我的答案。 - thejartender

5
这个命令可以下载JDK8 TGZ软件包(截止到2018年9月6日),祝好运!
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"

我尝试了其他命令,但都没有起作用,但这个命令很顺利地运行了(在2019年9月20日运行)。 - Another coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接