首页 > 编程语言 >java多版本共存

java多版本共存

时间:2023-04-16 13:56:27浏览次数:32  
标签:bin java 共存 HOME% 版本 path 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的安装路径,如下图:

在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

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

六,遇到的各种问题

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

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

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

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

    第一,确保你已经保存

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

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

  3. 生效的范围?

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

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

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

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

  5. 改了有啥用呢?

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

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

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

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

  6. 乱码?其实我没有啦

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

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

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

  7. 其他问题?

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

标签:bin,java,共存,HOME%,版本,path,JAVA,环境变量
From: https://www.cnblogs.com/writingblog/p/17323185.html

相关文章

  • java语句
    语句语句是以;或}或)结尾的一段代码,目的是执行某些操作,并且没有返回值。语句块和方法体也算语句。所以,语句是可以嵌套的。函数体是一个有名称的语句。对于拥有子语句的语句,称为复合语句,否则就是简单语句。 简单语句空语句:;;;方法调用语句:setVal(34);表达式语句:i......
  • javascript 把嵌套的 map 转成 object,再转 json 字符串
    使用JSON.stringify转map时发现并没有转成想要的JSON数据,搜索发现要转成Object才能够转成完整的JSON,用递归转换:constconvertNestedMapToObject=(map)=>{if(mapinstanceofMap){map.forEach((v,k)=>{......
  • 【Spring Cloud】SpringBoot、Spring Cloud、Spring Cloud Alibaba版本对应
    官方通告SpringBoot1.5.x及以下版本官方不再提供维护了,建议开发者选择使用SpringBoot2.0.x以上的版本,相对应的SpringCloud版本也最好不要使用。简单的查看版本信息:https://start.spring.io/actuator/infoSpringCloud对应的SpringBoot版本访问SpringCloud官网:https://spring......
  • [全程建模]基线和文档版本控制的问题
    基线和文档版本控制2007-05-2312:20:18 伊达全程建模各个阶段的结束标志,有吗?2007-05-2312:20:35 伊达例如:需求阶段如何才算结束了?分析阶段如何才算结束了?2007-05-2312:21:21青润因为是迭代化开发的建议,因此没有明显的结束标志,主要还是看工件的完成情况,比如需求真的全部做......
  • javascript常用的循环对比及性能分析
    结论:js中的for循环只有在处理百万条数据以上才会展示出他的强大性能,和看出明显优势,但是在百万条数据往下甚至到个位数的数据量通常都是for和while还有do...while不相上下,反而后两者更加优势明显下面是测试耗时截图(在不同浏览器也会有所不同,我这是Chrome版本111.0.5563.149)......
  • 使用文本编辑器和jdk开发简单JavaSE工程
    一个在eclipse下简单的示例 运行时可以在代码编辑器页面右键run测试发布时可以file->export->runnablejarfile 如果没有eclipse只有jdk和文本编辑器呢? 创建和eclipse工程相似的目录 目录JAVASE01binlibsrc\com\zt\javase01\IODemo.java 下面的命令是在编译class......
  • Java中常用排序算法及示例-冒泡排序、希尔排序、选择排序、插入排序、合并排序、基数
    场景Java中需要对数据进行排序处理,常用的排序算法以及示例进行归纳整理。注:实现1、冒泡排序冒泡排序法又称为交换排序法,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较。如此扫描一次之后就可以确保最后一个元素位于正确的顺序,接着逐步进......
  • Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
    场景1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(IterativeMethod)无法使用公式一次求解,而需要使用重复结构(即循环)重复执......
  • Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例
    场景Java中创建线程的方式有三种1、通过继承Thread类来创建线程定义一个线程类使其继承Thread类,并重写其中的run方法,run方法内部就是线程要完成的任务,因此run方法也被称为执行体,使用start方法来启动线程。2、通过实现Runanle接口来创建线程首先定义Runnable接口,并重写Runnable接口......
  • Java面向对象编程中级
    IDEA常用快捷键删除当前行,默认是ctrl+Y自己配置ctrl+d复制当前行,自己配置ctrl+alt+向下光标补全代码alt+/添加注释和取消注释ctrl+/导入该行需要的类先配置autoimport,然后使用alt+enter即可快速格式化代码ctrl+alt+L快速运行程序自己定义alt+......