【问题标题】:JVM version managerJVM 版本管理器
【发布时间】:2010-03-17 16:18:50
【问题描述】:

在 Java 世界中是否有 Ruby Version Manager 等价物?

我正在寻找可以让我轻松下载和安装新 JVM 并在它们之间切换的工具。例如:

jvm install <version>
jvm list //will list installed JVMs on my system
jvm use jdk1.6 //will switch my env to jdk 1.6 version, etc.

【问题讨论】:

  • 正如 jocull 所建议的,我发现 sdkman 是我的最佳 Java 版本管理器 sdkman.io

标签: java jvm rvm


【解决方案1】:

http://www.jenv.be/ 将允许这种类型的控制。

【讨论】:

  • 这似乎不支持Windows,或者是吗?
【解决方案2】:

SDKMAN! 是 Java 生态系统的类似工具。支持各种 Java 版本、Scala、Clojure、Kotlin、Groovy,以及 Maven 和 Gradle 等构建工具。

可在 Mac 和 Linux 上运行,根据您愿意尝试的程度,会提到对 Windows 的支持 :)

【讨论】:

    【解决方案3】:

    如果您使用 Ubuntu,您可以通过命令指定要使用的 JVM(仅适用于通过 apt-get 或 aptitude 安装的 JVM)

    sudo update-alternatives --config java

    或者通过设置 JAVA_HOME。这是很好的教程:

    http://vietpad.sourceforge.net/javaonlinux.html

    【讨论】:

      【解决方案4】:

      为了完整起见,还有两个 - jabba(我是其中的作者;用 Go 编写并根据 nvm/gvm/rvm 设计)和 jenv(不要与 jenv.be 混淆;不支持从 oracle 安装,但可以从自定义 zip 安装)。

      【讨论】:

      • 我更喜欢 jenv.be,因为它很简单(安装 jdk 应该是包管理器,而不是版本管理器)。但它只支持类Unix系统。
      【解决方案5】:

      使用 JVM,如果您需要在它们之间切换,您只需要使用批处理文件(或 powershell 脚本)来管理类路径和 JVM 路径。您不需要依赖系统默认的 JVM 路径,而只需通过更改运行 JVM 的 shell 中的类路径和 JVM 路径环境,让您的应用程序指向您喜欢的任何 JVM。

      对于从注册表获取 Java 位置的程序,理论上您也可以使用批处理脚本来更新它。

      在这方面,Java 比“Ruby 版本管理器”要容易得多。

      【讨论】:

        【解决方案6】:

        由于它(还没有)在可能性列表中,所以还有asdf
        asdf 不仅为 java 提供版本管理,它还默认为~400 different languages and tools 提供插件,你可以找到有关githubcreate your own 的更多信息。

        这是一个如何设置新安装的示例(您也可以安装completion,这样您就不必先列出版本)。添加了java插件,具体版本(有adoptopenjdkcorrettodragonwellgraalvmlibericamandrelmicrosoftopenjdkoracle等版本, sapmachinesemerutemurintravazulu) 已安装并配置为要使用的全局(或本地版本):

        asdf plugin-add java          # Add java Plugin
        asdf list-all java            # List all available java versions
        asdf install java openjdk-18  # Install specific jdk version
        asdf install java openjdk-17  # Install another jdk version
        asdf global java openjdk-18   # Set the global jdk version
        asdf local java openjdk-17    # Set the local version for calls from the current directory
        

        asdf 使用$HOME/.tool-versions 中的文件来配置全局选定版本。如果您调用具有不同版本的 .tool-versions 文件的目录中的任何工具,则会使用该工具(使用 asdf local … 定义)。

        【讨论】:

          【解决方案7】:

          诀窍是使用 update-java-alternatives(来自 java-common 包)。 update-alternatives 命令不会更新各种 java /bin 可执行文件的每个符号链接,这就是为什么 update-java-alternatives 更好。

          所以要使用 OpenJDK 6 到 7,请使用 update-java-alternatives -l 获取 Java 替代品列表,然后使用 sudo update-java-alternatives -s java-1.7.0-openjdk-amd64 切换 JDK。

          CAVEAT:上面的命令可能会抛出以下错误,

          update-alternatives: error: no alternatives for mozilla-javaplugin.so.
          update-java-alternatives: plugin alternative does not exist: 
            /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so
          

          这是因为默认没有安装openjdk插件。修复运行 sudo apt-get install icedtea-7-plugin 并重新运行 update-java-alternatives。

          【讨论】: