*********************************************************************************************
方案一:
*********************************************************************************************
一、下载JDK
JDK 8 (1.8.0_381)
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
JDK 17 (LTS)
https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
或使用OpenJDK(推荐)
Adoptium(原AdoptOpenJDK)
https://adoptium.net/temurin/releases/
或Amazon Corretto
https://aws.amazon.com/cn/corretto/
二、安装到不同目录
# 建议目录结构
C:\Java\jdk1.8.0_381\ # JDK 8
C:\Java\jdk-17.0.9\ # JDK 17
安装注意事项:
-
安装时选择自定义目录
-
不要安装公共JRE(避免冲突)
-
保持目录结构清晰
三、环境变量配置
右键"此电脑" → 属性 → 高级系统设置 → 环境变量
1. 创建 JAVA_HOME_8 和 JAVA_HOME_17 JAVA_HOME_8 = C:\Java\jdk1.8.0_381 JAVA_HOME_17 = C:\Java\jdk-17.0.9
2. JAVA_HOME(设置为默认版本,如JDK 17) JAVA_HOME = %JAVA_HOME_17%
3. Path 配置(重要!)
将 %JAVA_HOME%\bin 放在最前面
确保顺序:JDK bin > 其他Java相关 Path = %JAVA_HOME%\bin;其他路径...
************************************************************************************************
方案二:批处理脚本动态切换(最实用)
************************************************************************************************
创建切换脚本
:: switch-jdk.bat
@echo off
echo ========================================
echo JDK Version Switcher
echo ========================================
echo.
echo 1. Java 8 (1.8.0_381)
echo 2. Java 17 (17.0.9)
echo 3. Show current Java version
echo 4. Exit
echo.
set /p choice="Please choose [1-4]: "
if "%choice%"=="1" goto java8
if "%choice%"=="2" goto java17
if "%choice%"=="3" goto show
if "%choice%"=="4" goto end
:java8
setx JAVA_HOME "C:\Java\jdk1.8.0_381" /M
setx Path "%SystemRoot%\system32;%JAVA_HOME%\bin;其他原有路径" /M
echo Switched to Java 8
goto refresh
:java17
setx JAVA_HOME "C:\Java\jdk-17.0.9" /M
setx Path "%SystemRoot%\system32;%JAVA_HOME%\bin;其他原有路径" /M
echo Switched to Java 17
goto refresh
:show
java -version
pause
goto end
:refresh
echo.
echo Please restart Command Prompt or restart system to apply changes.
echo.
echo Current JAVA_HOME: %JAVA_HOME%
echo.
java -version
pause
:end
更强大的版本管理脚本
:: jenv.bat - 增强版
@echo off
setlocal enabledelayedexpansion
:: JDK目录配置
set JDK8=C:\Java\jdk1.8.0_381
set JDK11=C:\Java\jdk-11.0.20
set JDK17=C:\Java\jdk-17.0.9
set JDK21=C:\Java\jdk-21
:: 显示当前版本
echo Current Java Version:
java -version 2>&1 | findstr "version"
echo.
:: 参数处理
if "%1"=="" goto menu
if "%1"=="8" set NEW_JDK=%JDK8% & goto switch
if "%1"=="11" set NEW_JDK=%JDK11% & goto switch
if "%1"=="17" set NEW_JDK=%JDK17% & goto switch
if "%1"=="21" set NEW_JDK=%JDK21% & goto switch
if "%1"=="list" goto list
goto error
:menu
echo Usage: jenv [version]
echo Available versions: 8, 11, 17, 21
echo.
echo Example: jenv 8 (switch to Java 8)
goto end
:list
echo Available Java versions:
dir C:\Java\ /B
goto end
:switch
:: 备份原始Path
for /f "tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path 2^>nul') do set OLD_PATH=%%b
:: 移除所有JDK路径
set NEW_PATH=%OLD_PATH%
for %%j in ("%JDK8%" "%JDK11%" "%JDK17%" "%JDK21%") do (
set "JDK_BIN=%%~j\bin"
call set NEW_PATH=!NEW_PATH:%%JDK_BIN%%=!
)
:: 清理多余的分号
set NEW_PATH=%NEW_PATH:;;=;%
if "!NEW_PATH:~0,1!"==";" set NEW_PATH=!NEW_PATH:~1!
if "!NEW_PATH:~-1!"==";" set NEW_PATH=!NEW_PATH:~0,-1!
:: 添加新的JDK
set NEW_PATH=%NEW_JDK%\bin;%NEW_PATH%
:: 更新环境变量
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v JAVA_HOME /t REG_SZ /d "%NEW_JDK%" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%NEW_PATH%" /f
echo Successfully switched to Java %1
echo JAVA_HOME set to: %NEW_JDK%
goto end
:error
echo Error: Invalid version "%1"
goto menu
:end
endlocal
**********************************************************************
方案3:IDE配置多版本(开发常用)
*************************************************************************************************
telliJ IDEA配置
<!-- 设置JDK版本 -->
File → Project Structure → SDKs → + → Add JDK
多模块项目配置:
<!-- 不同模块使用不同JDK -->
Module1 (Legacy) → JDK 1.8
Module2 (New) → JDK 17
运行配置:
Run → Edit Configurations → JRE
选择特定版本的JDK
Eclipse配置
Window → Preferences → Java → Installed JREs
Add → Standard VM → 选择JDK目录
**************************************************************************
方案4:使用版本管理工具(现代方式)
******************************************************************************************************
1. SDKMAN!(Windows需要WSL)
# 在WSL中安装SDKMAN
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 安装多个Java版本
sdk list java # 查看可用版本
sdk install java 8.0.381-tem
sdk install java 17.0.9-tem
# 切换版本
sdk use java 8.0.381-tem
sdk use java 17.0.9-tem
# 设置默认版本
sdk default java 17.0.9-tem
2. Jabba(跨平台)
# Windows PowerShell安装
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-Expression (New-Object Net.WebClient).DownloadString('https://github.com/shyiko/jabba/raw/master/install.ps1')
# 使用
jabba install openjdk@1.8.0
jabba install openjdk@17
jabba use openjdk@1.8.0
jabba use openjdk@17
六、验证安装和切换
创建测试脚本
:: test-java.bat
@echo off
echo ===== Java Version Information =====
echo.
echo 1. JAVA_HOME:
echo %JAVA_HOME%
echo.
echo 2. Java Version:
java -version
echo.
echo 3. Javac Version:
javac -version
echo.
echo 4. Full Java Info:
java -XshowSettings:properties -version 2>&1 | findstr "java.home"
echo.
echo 5. All Java-related environment variables:
set | findstr /i java
echo.
pause
验证命令
# 检查当前Java版本
java -version
# 检查Javac版本
javac -version
# 查看Java安装路径
where java
where javac
# 查看所有Java进程
jps -l
七、Maven/Gradle项目配置
Maven多版本配置
<!-- pom.xml -->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- 或 -->
<maven.compiler.release>17</maven.compiler.release>
</properties>
<!-- 使用Toolchains支持多JDK -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<configuration>
<toolchains>
<jdk>
<version>1.8</version>
<vendor>oracle</vendor>
</jdk>
<jdk>
<version>17</version>
<vendor>oracle</version>
</jdk>
</toolchains>
</configuration>
</plugin>
.m2/toolchains.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>oracle</vendor>
</provides>
<configuration>
<jdkHome>C:\Java\jdk1.8.0_381</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>17</version>
<vendor>oracle</vendor>
</provides>
<configuration>
<jdkHome>C:\Java\jdk-17.0.9</jdkHome>
</configuration>
</toolchain>
</toolchains>
八、常见问题解决
问题1:java命令无效
:: 检查环境变量
echo %JAVA_HOME%
echo %Path%
:: 手动设置临时环境变量
set PATH=C:\Java\jdk1.8.0_381\bin;%PATH%
问题2:版本混乱
:: 清理所有Java相关环境变量
set JAVA_HOME=
set JRE_HOME=
set CLASSPATH=
:: 重新安装时完全卸载
1. 控制面板卸载所有Java
2. 删除C:\Program Files\Java
3. 删除环境变量
4. 重启后重新安装
问题3:IDE找不到JDK
# 在IDE中手动指定
- IntelliJ: File → Project Structure → SDKs
- Eclipse: Window → Preferences → Java → Installed JREs
- VS Code: 安装Java Extension Pack,配置java.home
九、最佳实践建议
目录结构示例
C:\Java\
├── jdk1.8.0_381\ # JDK 8
│ ├── bin\
│ ├── lib\
│ └── ...
├── jdk-11.0.20\ # JDK 11
├── jdk-17.0.9\ # JDK 17
├── jdk-21\ # JDK 21
├── scripts\ # 管理脚本
│ ├── switch-jdk.bat
│ ├── jenv.bat
│ └── test-java.bat
└── projects\ # 项目目录
├── legacy-project\ # 使用JDK 8
└── modern-project\ # 使用JDK 17
环境变量管理技巧
:: 使用setx永久设置
setx JAVA_HOME "C:\Java\jdk1.8.0_381"
:: 使用set临时设置(仅当前会话)
set JAVA_HOME=C:\Java\jdk1.8.0_381
set PATH=%JAVA_HOME%\bin;%PATH%
:: 在批处理开头保存原始PATH
set OLD_PATH=%PATH%
:: 结束时恢复
set PATH=%OLD_PATH%
推荐配置方案
-
开发环境:使用批处理脚本切换(方案2)
-
CI/CD环境:直接安装多个JDK,通过JAVA_HOME控制
-
个人学习:使用SDKMAN或Jabba
-
企业环境:标准化安装目录,统一管理
十、性能监控和调优
查看各版本使用情况
:: 监控脚本
@echo off
echo Java processes:
jps -l
echo.
echo Java version used by each process:
for /f "tokens=1" %%i in ('jps -l ^| findstr /v "Jps"') do (
echo Process %%i:
wmic process where "ProcessId=%%i" get CommandLine | findstr java
)
清理旧版本缓存
:: 清理Maven本地仓库
rmdir /s /q %USERPROFILE%\.m2\repository
:: 清理Gradle缓存
rmdir /s /q %USERPROFILE%\.gradle\caches
总结
最推荐的安装方案:
-
下载Adoptium的JDK 8和JDK 17
-
安装到
C:\Java\下的不同目录 -
使用批处理脚本动态切换
-
在IDE中为不同项目配置不同JDK
核心要点:
-
保持目录结构清晰
-
使用环境变量JAVA_HOME控制版本
-
将
%JAVA_HOME%\bin放在Path最前面 -
定期验证版本切换是否正确
这样你就可以在Windows 10上无缝使用Java 8和Java 17了!