【问题标题】:How do I set the default Java installation/runtime (Windows)?如何设置默认 Java 安装/运行时 (Windows)?
【发布时间】:2010-10-07 18:58:35
【问题描述】:

我的情况是我已经安装了JDK,但是我无法在浏览器中运行小程序(我可能没有安装JRE)。

但是,当我安装 JRE 时,它破坏了我的 JDK 作为默认运行时。这几乎破坏了一切(Eclipse、Ant)——因为它们需要服务器 JVM。

现在没有JAVA_HOME 环境变量——它似乎只是使用了一些注册表魔法(设置系统路径也没有用)。以前,我只是在使用它恢复 JDK 后卸载了 JRE。这次我要好好修复它。

这也体现在 jre 自动更新程序中 - 曾几何时,我使用 JDK 和 JRE 进行了工作设置,但它更新并破坏了所有内容。

【问题讨论】:

  • 好奇;我刚刚获得了这个问题的“著名问题”徽章,而且它只有 5 个赞成票?这是因为:A)这不是一个好问题; B)人们在寻找其他东西时偶然发现它; C)这在一般互联网(非 SO 用户)中非常受欢迎;或 D)(一如既往)“别的东西”

标签: java windows installation runtime


【解决方案1】:

受此问题影响,并已在 2020Windows 10 中解决。我正在使用 Java 8 RE14.1 JDK,它运行良好,直到 Eclipse 升级到版本 2020-09 .之后我无法运行 Eclipse,因为它需要使用 Java 11 或更高版本,并且它只找到 8 版本。这是因为“Path”的环境变量的顺序:

我想C:\Program Files (x86)\Common Files\Oracle\Java\javapath 是链接到已安装 JRE exe 文件的路径(在我的情况下是 Java 8),问题已通过在%JAVA_HOME% 之后向下移动此链接解决,导致 Java 14.1/bin 文件夹。

在请求可执行文件时,环境变量的顺序似乎会影响搜索文件夹的顺序。 感谢您的评论或更好的解释。

【讨论】:

    【解决方案2】:

    需要从环境中删除 C:\Program Files (x86)\Common Files\Oracle\Java\javapath 并替换为适合我的 JAVA_HOME

    【讨论】:

      【解决方案3】:

      运行 .jar 应用程序的另一种方法是为其创建一个 .bat cmd。 例如,您的电脑上安装了 jre10 和 jre8,而 jre10 是您的默认 jre。 但是您的 jar 被指定为与 jre8 一起使用,以下 cmd 将起作用:

      "C:\Program Files\Java\jre1.8.0_181\bin\java.exe" -jar JabRef-4.3.1.jar
      

      【讨论】:

        【解决方案4】:

        我刚刚遇到了这个问题(Java 1.8 与 Windows 7 上的 Java 9),我的发现是:

        短版

        默认似乎是(因为路径条目)

        c:\ProgramData\Oracle\Java\javapath\java -version
        

        选择您想要的版本(测试,在 cmd 中使用 tab 完成,不确定这些数字代表什么),我有 2 个选项,请查看更长的版本了解详情

        c:\ProgramData\Oracle\Java\javapath_target_[tab]
        

        删除联结/链接并链接到您的版本(在我的情况下,Java 8 以 181743567 结尾)

        rmdir javapath
        mklink /D javapath javapath_target_181743567
        

        更长的版本:

        在 Java 9 不起作用后重新安装 Java 1.8。安装顺序是 jdk1.8.0_74、jdk-9.0.4 并尝试使用 jdk1.8.0_162 使 Java 8 默认...

        jdk1.8.0_162安装后我还有

        java -version
        java version "9.0.4"
        Java(TM) SE Runtime Environment (build 9.0.4+11)
        Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
        

        我在路径中看到的是

        Path=...;C:\ProgramData\Oracle\Java\javapath;...
        

        所以我检查了那是什么,我发现它是一个路口(链接)

        c:\ProgramData\Oracle\Java>dir
         Volume in drive C is OSDisk
         Volume Serial Number is DA2F-C2CC
        
         Directory of c:\ProgramData\Oracle\Java
        
        2018-02-07  17:06    <DIR>          .
        2018-02-07  17:06    <DIR>          ..
        2018-02-08  17:08    <DIR>          .oracle_jre_usage
        2017-08-22  11:04    <DIR>          installcache
        2018-02-08  17:08    <DIR>          installcache_x64
        2018-02-07  17:06    <JUNCTION>     javapath [C:\ProgramData\Oracle\Java\javapath_target_185258831]
        2018-02-07  17:06    <DIR>          javapath_target_181743567
        2018-02-07  17:06    <DIR>          javapath_target_185258831
        

        那些哈希并没有响起,但是当我检查时

        c:\ProgramData\Oracle\Java\javapath_target_181743567>.\java -version
        java version "1.8.0_162"
        Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
        Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
        
        c:\ProgramData\Oracle\Java\javapath_target_185258831>.\java -version
        java version "9.0.4"
        Java(TM) SE Runtime Environment (build 9.0.4+11)
        Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
        

        为了让 Java 8 再次默认,我不得不删除链接,如 here 所述

        rmdir javapath
        

        然后用我想要的 Java 重新创建

        mklink /D javapath javapath_target_181743567
        

        测试:

        c:\ProgramData\Oracle\Java>java -version
        java version "1.8.0_162"
        Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
        Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
        

        ** 更新(Java 10)**

        与 Java 10 类似,只有 javapath 在 c:\Program Files (x86)\Common Files\Oracle\Java\ 这很奇怪,因为我安装了 64 位恕我直言

        .\java -version
        java version "10.0.2" 2018-07-17
        Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
        Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
        

        【讨论】:

          【解决方案5】:

          我在C:\Java 中安装了几个 JDK(1.4、1.5、1.6)及其 JRE。然后我让 Sun 更新 C:\Program Files\Java 中的公共 JRE。
          最近有一个改进,安装在 jre6 中。以前,每个新版本(1.5.0_4、1.5.0_5 等)都有一个不同的文件夹,这会占用大量空间

          【讨论】:

          • 您可能会添加有关如何“让 Sun 更新公共 JRE ...”的详细信息。您的回复并不是很有帮助。
          • 当您在 Windows 上安装 JDK 时,使用他们的 .exe 程序,在安装过程中它会询问是否可以安装 JRE。这就是我所说的“让 Sun [现在是 Oracle ...] 更新公共 JRE”的意思。我总是更改 JDK 的默认位置(更改为没有空格的路径,我将所有 Java 程序都放在这里),但始终保持默认的 JRE 安装路径。
          • 您的额外解释很有帮助并增加了价值,@PhiLho。谢谢!
          【解决方案6】:

          我只是安装了我需要的所有版本的 JDK,最新安装的成为默认版本,所以我只需重新安装我想要的默认版本。

          【讨论】:

          • 很遗憾,当我安装 Java 9 进行测试时,我不得不重新安装 Java 1.8...我后来发现即使重新安装对我也不起作用,请检查 my answer
          【解决方案7】:

          经过多次尝试,我发现路口的方法更方便。这和 linux 解决这个问题的方式非常相似。

          基本上它包括在c:\tools\java\default 和您想在系统中默认使用的实际java 版本之间有一个链接


          如何设置:

          1. 下载 junction 并确保将其放入您的 PATH 环境变量
          2. 以这种方式设置您的环境: - PATH 指向 ONLY 到这个 jre c:\tools\java\default\bin - JAVA_HOME 指向 `c:\tools\java\default
          3. 将所有 jre-s 存储在一个文件夹中,例如(如果您在 Program FIles 文件夹中这样做,您可能会遇到一些
            • C:\tools\Java\JRE_1.6
            • C:\tools\Java\JRE_1.7
            • C:\tools\Java\JRE_1.8
          4. 打开命令提示符并 cd 到 C:\tools\Java\
          5. 执行junction default JRE_1.6

          这将在C:\tools\java\defaultC:\tools\java\JRE_1.6 之间创建一个junction(或多或少类似于linux 中的符号链接)

          通过这种方式,您将始终在c:\tools\java\default 中拥有您的默认java。

          如果您需要将默认 java 更改为 1.8 版本,您只需执行

          junction -d default
          junction default JRE_1.8 
          

          然后你可以在没有命令提示符的情况下使用批处理文件 set_jdk8.bat set_jdk7.bat

          根据@СӏаџԁеМаятіи 的建议

          编辑:在 windows vista 中,您可以使用 mklink /J default JRE_1.8

          【讨论】:

          • 我就是这么做的。但现在它是 mklink /J 而不是 junction 用于较新版本的 Windows。您可以简单地使用rmdir 安全地删除连接(它不会影响链接的文件夹)。
          【解决方案8】:

          这在 Windows 上有点痛苦。这就是我所做的。

          安装最新的 Sun JDK,例如6u11,在c:\install\jdk\sun\6u11这样的路径中,然后让安装程序将公共JRE安装在默认位置(c:\program files\blah)。这将为大多数事情设置您的默认 JRE。

          根据需要安装较旧的 JDK,例如 c:\install\jdk\sun\5u18 中的 5u18,但不要安装公共 JRE。

          在开发过程中,我有一个小批处理文件,用于为每个 JDK 版本设置命令提示符。本质上只是设置JAVA_HOME=c:\jdk\sun\JDK_DESIRED,然后设置PATH=%JAVA_HOME%\bin;%PATH%。这会将所需的 JDK 放在路径的首位,任何辅助工具(如 Ant 或 Maven)都可以使用 JAVA_HOME 变量。

          路径很重要,因为大多数公共 JRE 安装都将链接的可执行文件放在 c:\WINDOWS\System32\java.exe,这通常覆盖大多数其他设置。

          【讨论】:

          • 关键是要把想要的java/bin作为系统路径的第一件事。
          • 我在路径中设置了 java_home 和新的 bin,没有工作,我不得不再次安装最新的 jre7 并解决了它
          • 非常好的和详细的答案,但是缺少 java 引入的关于路径位置切换的新最佳实践。见stackoverflow.com/questions/27996603
          • @user257319 在我看来并不像“java引入的新最佳实践”,至少没有参考,这就是说官方实践...
          • 有趣的是你不能只在Java控制面板中设置这个...你可以在那里设置很多东西,其中一半我什至不明白,但不是这个。
          【解决方案9】:

          我已经在属性对话框中修补了我的 eclipse 启动快捷方式的行为

          来自

          "E:\Program Files\eclipse\eclipse.exe"
          

          "E:\Program Files\eclipse\eclipse.exe" -vm "E:\Program Files\Java\jdk1.6.0_30\bin"
          

          in the Eclipse documentation所述

          这只是一个补丁,因为它取决于修复问题的快捷方式......

          另一种方法是在eclipse初始化文件中永久设置参数。

          【讨论】:

            猜你喜欢
            • 2011-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-20
            • 2018-01-16
            • 1970-01-01
            • 2012-02-04
            • 1970-01-01
            相关资源
            最近更新 更多