jdk从1.6升级到1.7可能会遇到的Version问题

来源:互联网 发布:淘宝客高佣金90 被骗 编辑:程序博客网 时间:2024/05/03 01:40

背景:

前段时间重装电脑,给系统安装了jdk1.6,之后因为换工作新单位用的jdk1.7,就升级了一下jdk(又安装了JDK1.7),重新配置了JAVA_HOME变量,这没有任何问题,之后因为一些原因,又需要切换回JDK1.6(又将JA VA_HOME改为了jdk1.6的安装目录),那么问题来了,执行java -version显示的版本始终是1.7的版本,但是echo %JAVA_HOME%却没错就是JDK1.6的安装目录

定位问题:

于是上网查找问题原因,有的说是jdk1.7及以后会修改注册表,也就是说安装了jdk1.7之后不再是去查找JAVA_HOME环境变量配置的jdk安装路径而是直接走注册表,按照这种说法找到对应的注册表配置如下:

(路径:HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Development Kit HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Plug-in HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment


由上面的截图我们可以看到,1.6和1.7都添加了对应的注册表,所以因为注册表的原因导致用命令java -version命令的时候显示的还是jdk1.7的信息并不成立,那么根本原因又是什么呢?

这个时候我们打开命令行执行where java,在命令行打印出了如下的两行信息:


很明显下面的java.exe正是我们需要的jdk下面的java,那么第一个也就是System32下面的java.exe是什么时候生成的呢?


从修改日期上看到,这与java相关的三个文件是在2015.10.20 13:10左右生成的,我又回过头去安jdk1.7的安装时间,如下:

 

从时间上看应该是安装jdk1.7的时候复制过去的,但是需要验证下,怎么验证呢 ?有个简单的办法就是看文件大小,system32下java javaw javaws三个文件大小分别为171 171 257kb,这和jdk1.7下面的是吻合的,但这不足以说明这三个文件是jdk1.7下面的,那我们接着去jdk1.6下看这三个文件的大小,分别是132 132和136kb,这足以说明system32下的这三个文件是在安装jdk1.7的过程中复制过去的,这里刚好jdk1.6和jdk1.7下的这三个文件大小不一样比较好区分,如果万一大小一样的话还可以反编译一下这三个可执行文件(看文件后缀是.exe,实质是根绝jar包打的可执行文件)然后根据里面的内容来区分。


到目前为止我们只能说明system32下的java文件是安装jdk1.7的过程中复制过去的还是不能解释为什么在执行java -version的时候出来的会是jdk1.7 ,这个时候我们回去看Path环境变量如下(为了便于查看已经按";"分行):

C:\Program Files\AMD APP\bin\x86;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;
%JAVA_HOME%\bin;
%M2_HOME%\bin;
%CATALINA_HOME%\lib;
%CATALINA_HOME%\bin

可以看到环境变量里%SystemRoot%\system32;在%JAVA_HOME%\bin;的前面,这也是为什么执行where java的时候出来的先是system32下的java,那么到现在其实原因已经很明显了,我们需要做的就是给Path环境变量里的%JAVA_HOME%\bin;移动到%SystemRoot%\system32的前面,这样就首先找到的是JAVA_HOME配置的JDK了,这样问你就得到解决了。


后记:以前遇到问题没有记录的习惯,也不会去刨根问题找问题的根本原因,这其实对于一个技术人来说的话很影响发展,以后我会去认真记录工作中遇到的一些问题,尽可能的做详尽的分析,有问题的地方求指正,免得误导大家。



0 0
原创粉丝点击