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了!

相关推荐
菜鸟233号2 小时前
力扣669 修剪二叉搜索树 java实现
java·数据结构·算法·leetcode
郝学胜-神的一滴2 小时前
Python魔法函数一览:解锁面向对象编程的奥秘
开发语言·python·程序人生
San30.2 小时前
深入理解 JavaScript:手写 `instanceof` 及其背后的原型链原理
开发语言·javascript·ecmascript
健康平安的活着2 小时前
springboot+sse的实现案例
java·spring boot·后端
北冥有一鲲2 小时前
LangChain.js:RAG 深度解析与全栈实践
开发语言·javascript·langchain
Code Warrior2 小时前
【C++】智能指针的使用及其原理
开发语言·c++
05大叔2 小时前
多线程的学习
java·开发语言·学习
lly2024063 小时前
C 位域:深度解析其概念、应用与未来趋势
开发语言
刺客xs3 小时前
多路IO复用
开发语言