Windows 多 JDK 配置(带环境变量配置失效方案)
有些时候,我们需要在电脑上安装多个板本的 JDK ,以适应不同板本的开发需求,同时部份软件需要指定的某个板本的 JDK 才能运行,一般这个时候我们也不想卸载原本的 JDK 再去安装新的,这时就需要对 JDK 进行一种方便的管理(通过改变环境变量)。
写这篇文章的起因是因为我在 Idea 中运行基于 JDK 1.8 的项目时没有问题,因为在
Project Structure
中配置了 JDK 的目录,而改为使用java -jar xxx.jar
方式运行时,
报错:
1 java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter原因:
Java SE 9 及以上移除了 JAXB API(属于 JAVA EE API),因此对应的 JDK 也不再包含相关 jar 包,而我本地虽然配置的是 JDK 8 的环境变量,但是使用
java -version
显示的是 jdk 11 板本,配置失效。解决:
第一种方式:pom.xml 文件中,加入这些被移除的相关包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>第二种方式:重新配置 JDK 环境变量(配置失效解决方案)。
推荐阅读:https://www.cnblogs.com/Evanpie/p/14815043.html
部份文章中的做法是删除文件或者 Path 中的一些环境变量,我的建议是不要删除,而是把自己配置的 JDK 移到顶部,因为系统是按照 Path 中以下路径的先后顺序来寻找 JDK 相关的可执行文件,找到后就不会再往下找。
C:\Program Files\Common Files\Oracle\Java\javapath
C:\ProgramData\Oracle\Java\javapath
C:\Windows\System32
D:Java\jdk1.8.0_291\bin
(你配置的路径)
这时候再使用
java -version
就会发现 JDK 已经切换成功。
上面的配置方式无法很方便的切换 JDK 板本,有没有一种更方便的方式呢?
1. 通过配置环境变量手动切换 JDK
「系统变量」中新建
CLASSPATH
变量,值为如下;1
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
编辑「系统变量」中的
Path
,在最前面加入以下值;1
%JAVA_HOME%\bin
新增
JAVA_HOME
环境变量。比如我的系统有三个板本的 JDK ,那么我需要添加如下变量。
变量 | 值 |
---|---|
JAVA_HOME | %JAVA_HOME8% |
JAVA_HOME8 | D:\Java\jdk1.8.0_291 |
JAVA_HOME11 | D:\Java\jdk-11.0.11 |
JAVA_HOME12 | D:\Java\jdk-12 |
- 以后通过修改
JAVA_HOME
的值切换 JDK,到此就满足基本需求了。
2. 通过 JEnv 工具切换 JDK
使用这种方式需要先删除上面配置的 JAVA_HOME
Github 地址:https://github.com/FelixSelter/JEnv-for-Windows
克隆该库;
1
git clone https://github.com/FelixSelter/JEnv-for-Windows.git
将该工具加入
Path
环境变量;扫描 jdk 路径并添加 jdk;
1
jenv autoscan D:\java # 选择你所有 JDK 所在的目录
需要根据提示修改 jdk 的名称
修改全局 JDK 板本;
1
jenv change jdk8
其他命令。
1
2jenv remove <jdkname>
jenv list
参考文章: