windows 10直接安装多个JDK

*********************************************************************************************

方案一:

*********************************************************************************************

一、下载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

安装注意事项

  1. 安装时选择自定义目录

  2. 不要安装公共JRE(避免冲突)

  3. 保持目录结构清晰

三、环境变量配置

右键"此电脑" → 属性 → 高级系统设置 → 环境变量

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%

推荐配置方案

  1. 开发环境:使用批处理脚本切换(方案2)

  2. CI/CD环境:直接安装多个JDK,通过JAVA_HOME控制

  3. 个人学习:使用SDKMAN或Jabba

  4. 企业环境:标准化安装目录,统一管理

十、性能监控和调优

查看各版本使用情况

复制代码
:: 监控脚本
@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

总结

最推荐的安装方案

  1. 下载Adoptium的JDK 8和JDK 17

  2. 安装到C:\Java\下的不同目录

  3. 使用批处理脚本动态切换

  4. 在IDE中为不同项目配置不同JDK

核心要点

  • 保持目录结构清晰

  • 使用环境变量JAVA_HOME控制版本

  • %JAVA_HOME%\bin放在Path最前面

  • 定期验证版本切换是否正确

这样你就可以在Windows 10上无缝使用Java 8和Java 17了!

相关推荐
stillaliveQEJ21 小时前
【JavaEE】Spring IoC(二)
java·开发语言·spring
民乐团扒谱机21 小时前
【微实验】MATLAB 仿真实战:多普勒效应 —— 洒水车音乐的音调变化仿真
开发语言·matlab·多普勒效应·多普勒频移
寻星探路21 小时前
【Python 全栈测开之路】Python 基础语法精讲(一):常量、变量与运算符
java·开发语言·c++·python·http·ai·c#
朔北之忘 Clancy21 小时前
2020 年 6 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
行百里er21 小时前
代码跑得慢?让Spring的StopWatch告诉你真相!
java·后端·github
csbysj202021 小时前
组合实体模式
开发语言
又是忙碌的一天1 天前
SpringMVC响应
java·服务器·数据库
万物皆字节1 天前
Spring Cloud Gateway 启动流程源码分析
java·开发语言·spring boot
问水っ1 天前
Qt Creator快速入门 第三版 第16-7章 其他内容
开发语言·qt
C_心欲无痕1 天前
ts - 关于Object、object 和 {} 的解析与区别
开发语言·前端·javascript·typescript