原文链接:https://blog.csdn.net/climber16/article/details/83242425
写在前面
我第一次安装java是在17年初,距离现在已经一年半了。今天上oracle官网一看,jdk都已经更新到11.0.1了,然而我用的还是1.8.0_171版本的老古董,遂决定把jdk升级一下,结果没想到这一升级就折腾了老半天。在这里把我的升级的详细步骤以及经验教训和大家分享一下。
卸载旧版本jdk
进入设置——应用,搜索java,得到两个结果,一个是jdk,一个是jre,把两个应用都卸载。卸载完以后先别急着去下载最新版jdk,先把系统环境变量中和jdk, jre相关的项删除,比如JAVA_HOME,以及Path中包含jdk, jre的值等。我就是因为有一个环境变量没清掉,后来环境变量怎么配都不对,浪费了好多时间。
下载jdk11
直接附上官网链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
打开页面后,首先勾选Accept Licence Agreement(默认是Decline),然后点击下载jdk-11.0.1_windows-x64_bin.exe,如图:
下载完成后,双击文件进入安装界面。点击下一步。
这里需要选择要装的功能以及安装路径,默认路径在C盘,个人不喜欢把软件装在C盘,所以点击更改,当然这里直接选择下一步也是可以的。
选择完安装目录后,点击确定,回到上一个页面。
选择开发工具作为要安装的可选功能,记住这里的安装路径,后面配置环境变量需要用到,点击下一步。
静静等待安装完成,点击关闭。
配置环境变量
为了让我们安装好的jdk在命令行下能够方便地使用,还需要为jdk配置环境变量。
点击桌面左下角圆圈图标,在弹出的搜索框中输入环境变量,点击编辑系统环境变量。
点击环境变量。
为了让计算机上的所有用户都能使用jdk,这里编辑的是系统环境变量。点击新建,变量名输入"JAVA_HOME",变量值就是在安装时选择的安装路径,到安装目录把地址复制一下,粘贴过来就好了。然后点击确定。
接下来在系统环境变量中找到Path(注意Windows中环境变量名不区分大小写),选中,点击编辑,在弹出的新窗口中点击新建,输入"%JAVA_HOME%in",点击确定。
至此,环境变量已经配置完成,在cmd分别输入javac --version和java --version,得到如下输出:
接着编译执行个java小程序看看是不是真的能用了,结果如图:
OK,大功告成。
经验教训
自己折腾的时候修改完Path环境变量,cmd下直接使用java命令执行java程序,发现提示
Error: opening registry key 'SoftwareJavaSoftJava Runtime Environment'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.
- 1
- 2
- 3
- 4
以为是自己少配了环境变量,网上看别人教程说还要修改ClassPath,Path里面还要加上jre相关的值,结果配置了半天也没什么用。然后以为是没下jre,另外下载安装了jre,又鼓捣了一番环境变量,然而还是没用。最后发现在Path里面还留着一一栏"C:ProgramDataOracleJavajavapath",到这目录里一看,好家伙,原来里头还藏着个java.exe,把这一栏一删,jre再一卸载,发现java命令就能正常使用了。原来之前在cmd执行java命令的时候一直找错路径了。。。
关于ClassPath环境变量的配置:jdk-1.8.0是把jre放在了jdk目录下,jdk10是把jre和jdk放在同一目录下,而jdk11就不知道把jre放哪儿了,反正我是没找到。。。所以jdk-1.8.0和jdk10是要在ClassPath中添加jre相关的值,而且配置方法也不一样,而jdk11嘛,既然找都找不到,那就不管了。其实就算没有ClassPath这个环境变量,一般的java程序也能运行,因为这时默认在当前目录寻找class文件,只要程序使用到的class文件都放在当前目录下,是不会有问题的。
总之就是在修改完Path环境变量后,注意上方是否有卸载java后残留的与java相关的环境变量值,一经发现,立马删除,否则Path的值就白改了,因为它会被上方的路径掩盖。以及jre是不需要自己另外下载安装的,jre都包含在jdk的安装路径下(虽然我暂时还没有找到jdk11的jre在哪里orz)。最后,ClassPath对于java初级玩家来说不用理会,等你成为高级玩家的时候,可能就需要把ClassPath好好配置一下了(不过到那时谁还用命令行跑java程序呢hh)。