在 Windows 上的两个 java 版本之间切换

Gle*_*iko 6 java windows version system-variable

目前我有一个java项目,我应该支持它的不同版本,它使用不同版本的Java(以及一些工具,如Ant)。取决于问题票证,我需要处理两个 java 版本(7 和 8),并且经常在它们之间切换。有人可以建议更容易处理的最佳方法吗?我正在 Windows 7 上工作,所以我编写了这样的用于切换的bat文件(“switch_java.bat”):

@ECHO OFF
set changeToNewVersion=%1

IF "%changeToNewVersion%"=="true" (
    setx /M ANT_HOME "c:\Program Files\Ant\apache-ant-1.9.4"
    setx /M JAVA_HOME "c:\Program Files\Java\jdk1.8.0_51"
) ELSE IF "%changeToNewVersion%"=="false" (
    setx /M ANT_HOME "c:\Program Files\Ant\apache-ant-1.8.3"
    setx /M JAVA_HOME "c:\Program Files\Java\jdk1.7.0_79"
) ELSE (
    echo ERROR: Enter key!
)
Run Code Online (Sandbox Code Playgroud)

但也许还有更优化的解决方案?

Huh*_*gut 5

Windows 上有一个 Github 工具。我自己也在用,效果真的很好。
如果您遇到问题,维护人员通常会很快做出响应

用法(注意:本地覆盖更改。使用覆盖本地)

  1. 添加新的Java环境(需要绝对路径)
    jenv add<name> <path>
    示例:jenv add jdk15 D:\Programme\Java\jdk-15.0.1

  2. 更改当前会话的 java 版本
    jenv use<name>
    示例:jenv use jdk15
    脚本编写的环境变量:
    ---PowerShell: $ENV:JENVUSE="jdk17"
    ---CMD/BATCH:set "JENVUSE=jdk17"

  3. 清除当前会话的 java 版本
    jenv use remove
    示例:jenv use remove
    用于脚本编写的环境变量:
    ---PowerShell: $ENV:JENVUSE=$null
    ---CMD/BATCH:set "JENVUSE="

  4. 全局更改您的 java 版本
    jenv change<name>
    示例:jenv change jdk15


  5. 始终在此文件夹jenv local<name>中使用此 java 版本
    示例:jenv local jdk15

  6. 清除此文件夹的 java 版本
    jenv local remove
    示例:jenv local remove

  7. 列出所有 Java 环境
    jenv list
    示例:jenv list

  8. 从 JEnv 列表中删除现有的 JDK
    jenv remove<name>
    示例:jenv remove jdk15

  9. 允许使用位于 java 目录
    jenv link<Executable name>
    中的 javac、javaw 或其他可执行文件 示例:jenv link javac

  10. 卸载 jenv 并自动恢复您选择的 Java 版本
    jenv uninstall<name>
    示例:jenv uninstall jdk17

  11. 自动搜索要添加的java版本
    jenv autoscan?<path>?
    示例:jenv autoscan "C:\Program Files\Java"
    示例:jenv autoscan// 将搜索整个系统

https://github.com/FelixSelter/JEnv-for-Windows


Gle*_*iko 0

为了在一个环境中管理不同版本的 Java,我们可以使用jEnv 工具。安装并将其添加到 Path 环境变量后,需要做的就是:

  • jEnv 看起来是一个很棒的工具,但它仅适用于基于 Unix 的操作系统。它是用shell脚本编写的,不能在Windows环境下运行。 (12认同)
  • Windows 的一种替代解决方案是 `sdkman` https://sdkman.io/。虽然需要Mingw或者W10自带的嵌入式Linux (2认同)