【java开发环境】多版本jdk 自由切换window和linux

win10

一、准备
各种版本的jdk,按自己的需要下载。

我这里是需要jdk17和jdk8。

1、jdk17
下载:Java Downloads | Oracle,选择exe后缀文件

2、jdk8下
载:Java Downloads | Oracle,选择exe后缀文件

二、详细步骤
1、安装jdk
很简单,双击exe文件后全部默认下一步即可,安装的时候记住安装路径。

如果想卸载,按照正常应用的卸载方式即可。

2、设置环境变量
2.1 删除jdk安装时自动添加的环境变量

操作位置:系统—关于—高级系统设置—环境变量—系统变量

删除Path变量中类似于:C:\Program Files\Common Files\Oracle\Java\javapath 的变量值,不一定一模一样,但格式大同小异

2.2 添加Path变量值

%JAVA_HOME%\bin

%JAVA_HOME%\jre\bin

2.3 添加CLASSPATH(一定要完全复制哦,不要忽略一开始的 .;%)

变量名:CLASSPATH

变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

2.4 添加JAVA_HOME17

变量名:JAVA_HOME17

变量值:C:\Program Files\Java\jdk-17

变量值就是之前让记住的jdk安装路径,一般都默认安装在C:\Program Files\Java下。

2.5 设置JAVA_HOME

变量名:JAVA_HOME

变量值:%JAVA_HOME17%

最后要点击确定保存配置,到这里java17的环境就配置好了,其他版本的jdk配置步骤和这个相同。

Path变量除了要删除每次安装jdk产生的变量值之外,不用重复添加%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin,CLASSPATH和JAVA_HOME17也只用配置一次,后面无需修改。

如果要配置java8的话,只需要新增变量名为JAVA_HOME8的变量,并将JAVA_HOME变量的变量值修改为%JAVA_HOME8%即可。

三、测试
1、如图,我这里已经同时安装好了jdk17和jdk8,并配置好了环境变量。

2、此时已经切换成java17,在命令行查看Java版本。

java -version

3、切换为java8

4、重新打开命令行,查看java版本。

每次切换,一定要关闭并重新打开命令行才可成功,每次改完环境变量后,要点击确定保存生效。

可能出错误 1

场景描述:我之前用的JDK是1.8版本的,但是项目变化后需要使用17版本的,我随后加下载并安装了17版本的,环境变量配置也更改好了,命令行输入:java -version后发现出来的还是1.8版本
我的问题导致的原因:
Oracle在使用过JDK后就会将JDK的配置写到配置文件中,
若是Oracle的环境变量配置在JDK的变量前时将会被Oracle的配置信息加载覆盖掉
因此,解决办法就是
将Oracle的环境变量放到JDK环境变量之后即可~

修改后的:

Linux

1.下载页面 Java Downloads | Oracle
2.安装jdk 
      说明:

                以下目录均为本次安装目录 具体目录需要以实际为主

                npm安装会自动安装在/usr/java

                tar -zxvf 可以指定安装目录

      2.1 使用 npm命令安装jdk8
         rpm -ivh  jdk-8u411-linux-x64.rpm

      2.2 切换到cd  /usr/java路径下查看集体文件名

        [root@i rpm]# cd /usr/java
        [root@i java]# ll
        total 0
        lrwxrwxrwx 1 root root 16 Jul  1 15:06 default -> /usr/java/latest
        lrwxrwxrwx 1 root root 30 Jul  1 15:06 jdk-17 -> /usr/lib/jvm/jdk-17-oracle-x64
        lrwxrwxrwx 1 root root 31 Jul  1 15:26 jdk1.8.0-x64 -> /usr/lib/jvm/jdk-1.8-oracle-x64
        lrwxrwxrwx 1 root root 30 Jul  1 15:26 latest -> /usr/lib/jvm/jdk-17-oracle-x64
      2.3 将JDK8使用软连接并交由alternatives管理
         alternatives --install /usr/bin/java java /usr/java/jdk1.8.0-x64/bin/java 3
   解释:3: 表示该程序的优先级,当有多个可选项时,数字越大,优先级越高
      2.4 使用 npm命令安装jdk17
          rpm -ivh  jdk-17_linux-x64_bin.rpm
      2.5 将JDK17使用软连接并交由alternatives管理
        alternatives --install /usr/bin/java java /usr/java/jdk-17/bin/java 4
      2.6 使用alternatives命令切换jdk
        alternatives --config java
3.使用java命令验证当前jdk的版本
java -version
4.使用alternatives --remove删除某版本
alternatives --remove java /usr/java/jdk1.8.0-x64/bin/java
5.tar -xvzf 安装基本操作基本一致不在做详细说明
     5.1 主要安装命令目录有所改变如下命令
 tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/jdk 
6.alternatives的一些命令介绍
# 1. --install 新注册一个group到generic name中
#alternatives --install <link> <name> <path> <priority>
# 2. --display name 显示某个通用名字中包含的组以及各个组的优先级、主从链接
# 3. --list 列出alternative系统中所有的组
# 4. --config name 交互式更改某个通用名字中的默认组;也可以
# 5. --set name path 直接设置默认组(这里的path是组中的master link的实际路径)
# 6. --auto name 把name的模式设为自动
# 7. --remove name path 删除某个组 name + path 可以唯一标识一个组

在Linux操作系统中,很多时候我们需要安装和卸载不同的软件包,其中JDK(Java Development Kit)是一个非常重要的软件包,它包含了运行Java程序所需的一切工具和库。在Linux系统中,我们通常会使用RPM(Red Hat Package Manager)来安装和卸载软件包。

在卸载JDK之前,我们首先需要确定JDK的安装路径。通常情况下,JDK默认安装在“/usr/java/”目录下。我们可以通过以下命令来确认JDK的安装路径:

```
ls /usr/java/
```

如果JDK安装在其他路径下,我们可以通过在终端中输入“java -version”命令来获取JDK的安装路径。然后,我们可以使用以下命令来卸载JDK软件包:

```
rpm -qa | grep jdk
```

这个命令将列出已安装在系统中的所有与JDK相关的软件包。然后,我们可以使用以下命令来卸载JDK软件包:

```
rpm -e
```

其中“”是我们在上一步中列出的JDK软件包的名称。通过执行这个命令,我们可以将JDK软件包从系统中完全卸载掉。

在卸载JDK软件包之后,我们还可以通过以下命令来验证JDK是否已被成功卸载:

```
java -version
```

如果系统显示类似“command not found”等信息,说明JDK已被成功卸载。另外,我们还可以通过以下命令来查看系统中是否还存在任何与JDK相关的文件:

```
find / -name "*jdk*"
```

如果在系统中依然存在与JDK相关的文件,我们可以手动删除这些文件以完成卸载操作。

总的来说,使用RPM来卸载JDK软件包是一种简单有效的方法。我们只需要通过几条简单的命令就可以将JDK从系统中完全移除。这样不仅能够释放系统资源,还能够确保系统的干净与稳定。希望以上内容对你有所帮助
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux线程:编织并发的梦幻世界

目录 &#x1f6a9;引言 &#x1f6a9;听故事&#xff0c;引概念 &#x1f6a9;生产者消费者模型 &#x1f680;再次理解生产消费模型 &#x1f680;挖掘特点 &#x1f6a9;条件变量 &#x1f680;条件变量常用接口 &#x1f680;条件变量的原理 &#x1f6a9;引言 上一篇…

Redis分布式锁代码实现详解

引言 在分布式系统中&#xff0c;资源竞争和数据一致性问题常常需要通过锁机制来解决。Redis作为一个高性能的键值存储系统&#xff0c;因其提供的原子操作、丰富的数据结构以及网络延迟低等特点&#xff0c;成为了实现分布式锁的理想选择。本文将详细介绍如何使用Redis来实现…

打卡第2天----数组双指针,滑动窗口

今天是参与训练营第二天&#xff0c;这几道题我都看懂了&#xff0c;自己也能写出来了&#xff0c;实现思路很重要&#xff0c;万事开头难&#xff0c;希望我可以坚持下去。希望最后的结果是量变带来质变。 一、理解双指针思想 leetcode编号&#xff1a;977 不止是在卡尔这里…

一篇文章说清楚Filter(过滤器)、Interceptor(拦截器)和AOP(切面儿)

文章目录 前言一、Filter&#xff08;过滤器&#xff09;1.说明2.实现filterChain.doFilter() 3.order优先级4.解决跨域5.拦截返回错误信息JSON 二、Interceptor&#xff08;拦截器&#xff09;1.说明2.实现preHandlepostHandleafterCompletion 3.执行顺序图4.排除特定路径拦截…

【LinuxC语言】线程退出函数的实现

文章目录 前言线程退出函数的作用和实现流程函数实现线程池代码概况总结前言 在并发编程中,线程的创建和销毁是两个非常重要的环节。在Linux C语言环境下,我们可以使用POSIX线程库(pthread)来创建和控制线程。然而,线程的退出并不是一个简单的过程,它涉及到许多细节,如…

论文学习——基于类型检测的动态自适应多目标优化算法

论文题目&#xff1a;Dynamic adaptive multi-objective optimization algorithm based on type detection 基于类型检测的动态自适应多目标优化算法&#xff08;Xingjuan Cai a,b, Linjie Wu a,∗, Tianhao Zhao a, Di Wu c, Wensheng Zhang d, Jinjun Chen e&#xff09;Inf…

yum命令提示 错误:rpmdb: BDB0113 Thread/process 4153/139708200269632

一、报错信息 [rootDawn yum.repos.d]# yum clean all 错误&#xff1a;rpmdb: BDB0113 Thread/process 4153/139708200269632 failed: BDB1507 Thread died in Berkeley DB library 错误&#xff1a;db5 错误(-30973) 来自 dbenv->failchk&#xff1a;BDB0087 DB_RUNRECOVE…

HTTP与HTTPS协议区别及应用场景

HTTP&#xff08;超文本传输​​协议&#xff09;和 HTTPS&#xff08;安全超文本传输​​协议&#xff09;都是用于通过网络传输数据的协议。虽然它们有一些相似之处&#xff0c;但在安全性和数据保护方面也存在显著差异。 在这篇博文中&#xff0c;我们将探讨 HTTP 和 HTTPS…

websocket的工作原理

WebSocket 是一种在 Web 应用程序中实现全双工通信的协议。它允许客户端和服务器之间建立一个持久的连接&#xff0c;双方可以在这个连接上相互发送数据&#xff0c;而不需要通过传统的 HTTP 请求/响应模式。这使得 WebSocket 特别适用于实时应用&#xff0c;如聊天应用、在线游…

pytorch中的contiguous()

官方文档&#xff1a;https://pytorch.org/docs/stable/generated/torch.Tensor.contiguous.html 其描述contiguous为&#xff1a; Returns a contiguous in memory tensor containing the same data as self tensor. If self tensor is already in the specified memory forma…

自然语言处理与Transformer模型:革新语言理解的新时代

引言 自然语言处理&#xff08;NLP&#xff09;是人工智能和计算机科学的一个重要分支&#xff0c;旨在使计算机能够理解、生成和处理人类语言。随着互联网和数字化信息的爆炸性增长&#xff0c;NLP在许多领域中的应用变得越来越重要&#xff0c;包括&#xff1a; 搜索引擎&am…

domain 和 特征之间的关系

在计算机学术届&#xff0c;通常说的domain是什么意思&#xff1f; 例子1&#xff1a;在数学和函数的语境中&#xff0c;“domain” 通常指的是函数的定义域&#xff0c;即函数可以接受的输入值的集合。 假设这个时候定义域是{1,3,4,6,7,8,9,55}&#xff0c;那么定义域里面的…

配置下载 docker镜像 playedu开源 最佳实践部署

下载docker-compose docker-ce https://github.com/docker/compose/tagswget https://github.com/docker/compose/releases/download/v2.28.0/docker-compose-linux-x86_64sudo chmod x /usr/local/bin/docker-compose下载docker镜像 国内加速地址 目前仍可用的镜像(随时可能失…

Python实现PowerPoint演示文稿到图片的批量转换

PowerPoint演示文稿作为展示创意、分享知识和表达观点的重要工具&#xff0c;被广泛应用于教育、商务汇报及个人项目展示等领域。 然而&#xff0c;面对不同的分享场景与接收者需求&#xff0c;有时需要我们将PPT内容以图片形式保存与传播。这样能够避免软件兼容性的限制&…

OpenEuler 22.03 LTS SP3 CVE-2024-6387 OpenSSH 漏洞修复指南

一、漏洞概括 漏洞名称OpenSSH Server远程代码执行漏洞漏洞编号CVE-2024-6387公开时间2024-7-1CVSS 3.1分数8.1威胁类型代码执行漏洞等级暂无技术细节状态已公开在野利用状态不明确PoC状态x86已公开EXP状态未公开 OpenSSH是SSH&#xff08;Secure Shell&#xff09;协议的开源…

腾讯课堂即将停止服务?来试试这款开源的知识付费系统

项目介绍 本系统基于ThinkPhp5.0layuiVue开发,功能包含在线直播、付费视频、付费音频、付费阅读、会员系统、分销系统、拼团活动、直播带货、直播打赏、商城系统等。能够快速积累客户、会员数据分析、智能转化客户、有效提高销售、吸引流量、网络营销、品牌推广的一款应用&…

客观分析-自己和本科学生之间的差距

进入专科学校和与985、211等重点本科院校学生之间的差距可能由多种因素造成&#xff0c;这些因素可能包括但不限于&#xff1a; 1. **入学标准**&#xff1a; 985和211工程院校通常有更高的入学标准和更严格的选拔过程。 你得使你自己适应更高的入学标准和更严格的选拔过程&am…

python运行bat命令

python运行bat命令 1、在Python中运行BAT命令&#xff0c;可以使用内置的subprocess模块。以下是一个简单的例子&#xff0c;展示如何运行一个BAT文件。 import subprocess# 假设你有一个名为script.bat的BAT文件 bat_file script.bat# 使用subprocess.run来运行BAT文件 res…

7、实体和值对象:领域模型的基础单元

DDD战术设计中有两个重要的概念&#xff1a;实体&#xff08;Entity&#xff09;和值对象&#xff08;Value Object&#xff09;。二者是领域模型中非常重要的基础领域对象&#xff08;Domain Object&#xff0c;DO&#xff09;。 从DDD战略设计到战术设计会经历从业务建模到技…

【Git 学习笔记】gitk 命令与 git log 其他参数的使用

1.7 用 gitk 查看提交历史 # make sure you have gitk installed $ which gitk /usr/bin/gitk # Sync the commit ID $ git checkout master && git reset --hard 13dcad # bring up the gitk interface, --all to see everything $ gitk --all &实测结果&#xf…