• JDK版本不兼容问题之:一台机器安装多个版本的JDK


    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://guojie.blog.51cto.com/59049/45964

     

    我的机器上最开始安装的是jdk1.6,后来因为工作需要又安装了jdk1.4。但是,环境变量我并未更改,还是指向jdk1.6的路径的。 

    可是,在cmd窗口输入 java -version 却得到是1.4.2。 

    查询环境变量: 
    1.我的电脑->属性->高级->环境变量 
    2. 系统环境变量(HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment) 
      当前用户环境变量(HKEY_CURRENT_USEREnvironment)
     

    2个设置完全是一样,都是指向1.6。 

    为了搞清楚问题的原因,通过查询相关的资料,原来是这样的: 

    JDK在安装的过程当中将在注册表会生成如下3个项目: 
    HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Development Kit 
    HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Plug-in 
    HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment 

    同时,JDK安装程序将会把java.exe,javaw.exe,javareg.exe这3个可执行文件拷贝到%SystemRoot%system32目录下,由于%SystemRoot%system32被操作系统缺省的设置为最高优先权的PATH搜索路径,因此可保证用户在命令行任何目录下可运行java.exe来启动JVM。 

    查询HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment得知CurrentVersion=1.4。 
    于是我手动将它修改为1.6后,然后运行java -version得到以下结果: 

    Registry key 'SoftwareJavaSoftJava Runtime Environment 
    has value '1.6', but '1.4' is required. 
    Error: could not find java.dll 
    Error: could not find Java 2 Runtime Environment.
     

    所以,不能简单的修改注册表的CurrentVersion值来达到更改运行的JRE。若人为的修改CurrentVersion,会使得不同版本的java.exe加载与己版本不符的java.dll及 jvm.dll,将引起难以预料的后果! 

    一般地,当在系统中装了两套或多套版本的Java2 SDK,后面安装的Java2 SDK会将自己带的java.exe和javaw.exe拷贝到%SystemRoot%system32目录下,从而覆盖先前版本的java.exe和 javaw.exe,并且在注册表中改写CurrentVersion为后安装的版本。所以建议在安装Java2 SDK前,先卸载以前安装的版本。

  • 相关阅读:
    关于我的博客园皮肤效果
    Typora结合Git打造完美的个人云笔记本
    linux查看占用端口的进程号并杀死该进程
    关于将ISO 8601格式的时间字符串转化为yyyy-MM-dd hh:mm:ss格式字符串用于前后台传输数据方法
    前后端分离_Vue_axios本地跨域(前端localhost:8080到后端localhost:8090)
    T-SQL 查询分区详细信息和行计数
    INSERT INTO vs SELECT INTO
    SQL Server
    T-SQL 常用语句
    T-SQL Datetime转换成字符类型
  • 原文地址:https://www.cnblogs.com/freeton/p/3650551.html
Copyright © 2020-2023  润新知