java多版本共存

原理

通过脚步改变path环境变量来实现java多版本切换.这里使用的是Win10.

一,删除原有的java搜索路径.

在安装高版本的java时,会添加一个路径到path环境变量中,如我的C:\Program Files\Common Files\Oracle\Java\javapath,在该目录下存有java.exe和javac.exe等.在用cmd执行命令时,cmd会在path变量包含的路径中查找.你需要在环境变量中删除该路径.

二,设置JAVA_HOME和%JAVA_HOME%\bin

在环境变量中添加JAVA_HOME,值为jdk的安装路径,如下图:

java多版本共存

在path变量中添加一条%JAVA_HOME%\bin.通过%变量名%的方式来调用变量,这里有点像字符串拼接.在%JAVA_HOME%\bin下,你可以找到java.exe与javac.exe.在path中添加后,cmd也能找到.

三,安装其他版本的java

这里后来安装了java8.它的安装过程中不会自动改变环境变量,如果你安装的是其他版本,可能需要留意这个问题,删除新加的路径以免产生干扰.

四,编写.bat文件

文件名:setjava8.bat,内容如下

@echo off
set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_201
set Path=%JAVA_HOME%\bin;%Path%
echo -------path环境未使用C:\Program Files\Common Files\Oracle\Java\javapath---
echo -------setjava8.bat位于system32中---
echo -------JAVA_HOME=%JAVA_HOME%----
echo -------Java8 activated,仅当前窗口有效---

它的作用:改变JAVA_HOME的值,重新拼接一个路径到path变量值,严格来讲是覆盖与原有的path.

ehco的作用是在命令行打印字符.

你可以把setjava8.bat文件放在path中包含的路径下.当然, 得是改变前的path变量的路径.我把他放在在\windows\system32中,这是path变量中原有的路径.这个目录有特殊的权限规则.

你甚至可以把他放在%JAVA_HOME%\bin下.这要求你的路径设置是正确的,以便在改变%JAVA_HOME%\bin前可以找到.

如果你有需求,可以对文件内容进行修改,比如改改echo 后面的内容.

五,生效

如果你看懂了.bat文件里的内容,会发现核心就两句:

set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_201 set Path=%JAVA_HOME%\bin;%Path%

如果你只需要在命令行执行,可以缩成一句:

set Path=D:\Program Files\Java\jdk1.8.0_201\bin;%Path%

不过JAVA_HOME有特殊的意义.

它们的目的是在找到java16的java.exe等文件之前先在java8里找到了.这使得cmd在执行java -version时,使用的是java8

如果你完成了,使用效果是这样的:

java多版本共存

六,遇到的各种问题

  1. 如果打开环境变量设置?

    你可以在文件资源管理器的此电脑上右击,点属性,打开设置.在设置->高级系统设置中可以找.

    或者使用搜索,搜env可以找到

  2. 修改的环境变量没有生效?

    第一,确保你已经保存

    第二,确保cmd是新开的一个。因为可能有缓存的问题

    第三,再次确认你没有设置错误,毕竟错了它也不报错

  3. 生效的范围?

    仅当前窗口有效,新开的是没有经过效果的。所以一开始的%JAVA_HOME%\bin需是正常的,这决定默认使用的java版本.

    set命令可以在打印所有的环境变量,可以使用set | findstr -i java命令察看有关的环境变量还确认这件事。我觉得你没有这么闲,除非你第一次见或出错了~

  4. 变量后面要不要加\?

    设置的时候你也疑惑要不要在%JAVA_HOME%后加\.要加的,因为路径的后面没有\,拼接的时候就得加上。当年因为在.bat里末尾多加了一个\,出现\\bin的情况。

  5. 改了有啥用呢?

    一般集成开发环境是支持多版本的.

    这种通过脚本改环境变量的方法 能力有限.

    冰蝎3需要java8的运行时环境,你可以这样用:java -jar ???

    java多版本共存

    冰蝎4虽然可以在java16中也可以打开,似乎会莫名地卡.让我回想起当前玩英雄联盟时电脑总是突然死机的光景(#`-_ゝ-)

  6. 乱码?其实我没有啦

    因为cmd的字符集是utf-8.在读utf-8编码的文件时会正常显示。

    cmd默认的字符集似乎是GBK.如果你有需要,可以到网上找找怎么改.

    乱码问题不大,毕竟大多数字符集中没人抢那52个英文字母的位置,程序还能运行.

  7. 其他问题?

    没了没了,我想不到了.如果还有,你得去找他人的文章或视频了.计算机玄学总是会碰到的, 实在不行,你可以重来一次(¬‿¬)

原文链接:https://www.cnblogs.com/writingblog/p/17323185.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java多版本共存 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • Java lambda 循环累加求和代码

    下面是Java lambda 循环累加求和代码的完整攻略。 什么是Lambda表达式? Lambda 表达式是 Java 8 版本引入的一种新特性,是一个匿名函数,可以将其作为一个方法的参数或者返回值,并且可以依据需要自行定义它的参数类型。 Lambda 在 Java 中的语法格式如下: (parameters) -> expression or (p…

    Java 2023年5月19日
    00
  • Java中日期格式化YYYY-DD的操作bug

    首先需要明确一点,关于Java日期格式化中YYYY和yyyy的区别。YYYY是基于周的年份,而yyyy是基于实际年份。 假设我们有以下的日期字符串:2021-08-01。如果使用如下的格式化模式:YYYY-DD,希望得到的结果是2021-01。但是实际输出的结果是2020-01。这是由于Java的日期格式化器在处理模式字符串时,YYYY会被认为是“基于周的年…

    Java 2023年5月20日
    00
  • 比较Java数组和各种List的性能小结

    标题:比较Java数组和各种List的性能小结 引言 在Java中,数组(array)和列表(list)是两个常见的数据类型。其中,数组是一个有序集合,大小固定,一旦分配了空间,大小就不能改变。而列表则是一个可变集合,其大小可以在运行时动态增加或减少。在实际开发中,我们常常需要在数组和列表中选择一种数据结构。本文将比较Java数组和各种List的性能,从而辅…

    Java 2023年5月26日
    00
  • java的Hibernate框架报错“LockAcquisitionException”的原因和解决方法

    当使用Java的Spring Boot框架时,可能会遇到“CannotAcquireLockException”错误。这个错误通常是由于以下原因之一引起的: 数据库并发问题:如果多个用户同时访问同一条记录并尝试更新,则可能会出此错误。在这种情况下,需要使用乐观锁或悲观锁来解决并发问题。 数据库锁定问题:如果数据库锁定了某些记录,则可能会出现此错误。在这种情况…

    Java 2023年5月4日
    00
  • jsp中定义和使用方法示例介绍

    下面详细讲解“JSP中定义和使用方法示例介绍”的攻略。 一、定义和使用方法 1.1 定义方法 在JSP中定义方法,可以使用<%! %>标签。例如: <%! public int add(int num1, int num2) { return num1 + num2; } %> 以上代码定义了一个名为“add”的方法,该方法返回两个整…

    Java 2023年6月15日
    00
  • SpringBoot响应处理实现流程详解

    下面我将详细讲解“SpringBoot响应处理实现流程详解”的完整攻略。 前言 Spring Boot 响应处理的实现流程是相对复杂的,但是熟练掌握后对于实现自己的响应处理或者了解框架背后的原理非常有帮助。 Spring Boot响应处理实现流程详解 Spring Boot 的请求响应处理流程大概如下: 用户请求到达 DispatcherServlet 后,…

    Java 2023年5月15日
    00
  • Java精确抽取网页发布时间

    针对Java精确抽取网页发布时间,下面是完整的攻略,包含以下几个步骤: 1. 获取HTML网页源代码 使用HttpClient或Jsoup等网络库,向目标网页发送请求,获取返回的HTML文本内容。 示例1-使用HttpClient获取HTML网页源代码: import org.apache.http.client.methods.HttpGet; impor…

    Java 2023年5月26日
    00
  • Java实现俄罗斯方块游戏简单版

    Java实现俄罗斯方块游戏简单版攻略 1. 游戏规则 游戏主体是一个10×20的矩形,叫做游戏区域。 有7种俄罗斯方块:O型方块、I型方块、J型方块、L型方块、S型方块、Z型方块和T型方块。 方块从游戏区域的顶端开始落下,用户通过键盘来控制方块的下落、旋转和移动。 方块在落地和碰到已经堆叠的方块后会停止下落。 能够得分的方式是消除已堆叠的完整行,一次可以消除…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部