Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上的JAVA_HOME似乎没有任何效果_Java_Windows_Powershell_Cmd_Java Home - Fatal编程技术网

Windows上的JAVA_HOME似乎没有任何效果

Windows上的JAVA_HOME似乎没有任何效果,java,windows,powershell,cmd,java-home,Java,Windows,Powershell,Cmd,Java Home,我的系统上有三个不同的JDK,因此我可以在项目之间进行适当的切换。在我的IDE中导入适当的JDK没有问题,但是命令行没有问题。请参阅,尽管我的用户和系统都指向jre1.8.0_261,但是JAVA_HOME: java--version似乎仍然认为我的默认版本是Amazon的Corretto JDK,我只需要一个特定的项目: C:\Users\jasonfil>java --version openjdk 11.0.8 2020-07-14 LTS OpenJDK Runtime Env

我的系统上有三个不同的JDK,因此我可以在项目之间进行适当的切换。在我的IDE中导入适当的JDK没有问题,但是命令行没有问题。请参阅,尽管我的用户和系统都指向
jre1.8.0_261
,但是
JAVA_HOME

java--version
似乎仍然认为我的默认版本是Amazon的Corretto JDK,我只需要一个特定的项目:

C:\Users\jasonfil>java --version
openjdk 11.0.8 2020-07-14 LTS
OpenJDK Runtime Environment Corretto-11.0.8.10.1 (build 11.0.8+10-LTS)
Powershell也是如此。作为管理员,我还尝试了
cmd
Powershell。同样的问题

奇怪的是,当我从
cmd
查询环境变量时,我得到了预期的JDK:

C:\Users\jasonfil>echo %JAVA_HOME%
C:\Program Files (x86)\Java\jre1.8.0_261
在Powershell上,
echo
只输出字符串
%JAVA\u HOME
,字面意思是:

PS C:\Users\jasonfil> echo %JAVA_HOME%
%JAVA_HOME%

我的目标是能够在Java版本之间随意切换,就像基于UNIX的系统中的
更新替代方案
机制一样。有什么想法吗?

cmd和Powershell都将引用Path变量,以检查请求的可执行文件是否在路径中。JAVA_HOME变量将仅由IDE或JAVA应用程序使用。因此,要在路径中包含所需的JDK,请将JDK path to path环境变量附加到用户变量(如果您希望此设置只影响当前登录的用户,即您的登录名)或系统变量


添加这些设置后,请确保重新打开cmd或Powershell控制台,使设置生效。

cmd和Powershell都将引用Path变量,以检查请求的可执行文件是否在路径中。JAVA_HOME变量将仅由IDE或JAVA应用程序使用。因此,要在路径中包含所需的JDK,请将JDK path to path环境变量附加到用户变量(如果您希望此设置只影响当前登录的用户,即您的登录名)或系统变量


添加这些设置后,请确保重新打开cmd或Powershell控制台,以使设置生效。

您获得的所有输出都与预期一致

  • JAVA_HOME
    与JAVA版本无关。它只是一个变量,通常大多数基于Java的软件(例如Web和App服务器、IDE等)都使用它来查找JDK安装。因此,您应该将其设置为JDK的基本文件夹,例如
    C:\Program Files\Java\jdk1.8.0\u 261
  • java-version
    查找JDK安装的
    bin
    文件夹中的
    java.exe
    ,例如
    C:\Program Files\java\jdk1.8.0\u 261\bin
    。因此,
    C:\Program Files\Java\jdk1.8.0\u 261\bin
    应该是
    PATH
    变量中的值之一。如果您已经如上所述设置了
    JAVA\u HOME
    ,那么设置
    JAVA.exe
    的路径会变得更容易,因为您可以在
    path
    变量中设置
    %JAVA\u HOME%\bin
    而不是
    C:\Program Files\JAVA\jdk1.8.0\u 261\bin
  • echo%JAVA\u HOME%
    将返回在
    JAVA\u HOME
    变量中设置的值。类似地,如果使用
    echo%PATH%
    ,您将获得
    PATH
    变量中设置的值

  • 注意:您没有获得从Java-11开始的JRE。

    您获得的所有输出都是预期的

  • JAVA_HOME
    与JAVA版本无关。它只是一个变量,通常大多数基于Java的软件(例如Web和App服务器、IDE等)都使用它来查找JDK安装。因此,您应该将其设置为JDK的基本文件夹,例如
    C:\Program Files\Java\jdk1.8.0\u 261
  • java-version
    查找JDK安装的
    bin
    文件夹中的
    java.exe
    ,例如
    C:\Program Files\java\jdk1.8.0\u 261\bin
    。因此,
    C:\Program Files\Java\jdk1.8.0\u 261\bin
    应该是
    PATH
    变量中的值之一。如果您已经如上所述设置了
    JAVA\u HOME
    ,那么设置
    JAVA.exe
    的路径会变得更容易,因为您可以在
    path
    变量中设置
    %JAVA\u HOME%\bin
    而不是
    C:\Program Files\JAVA\jdk1.8.0\u 261\bin
  • echo%JAVA\u HOME%
    将返回在
    JAVA\u HOME
    变量中设置的值。类似地,如果使用
    echo%PATH%
    ,您将获得
    PATH
    变量中设置的值

  • 注意:没有为您提供以Java-11开头的JRE。

    Java不使用
    Java\u HOME
    环境变量。有些工具会这样做,特别是在安装工具的过程中,但这是不同的

    Java甚至不需要位于
    路径
    ,但如果是这样的话,肯定会更方便

    这个问题表明在
    C:\ProgramFiles(x86)\Java\jre1.8.0\u 261
    上安装了一个Java

    它还显示了某个地方有一个OpenJDK 11.0.8,但没有显示在哪里,因此对于这个答案,我们将假设它已安装/解压缩到
    C:\foo\OpenJDK-11.0.8

    java
    可执行文件位于
    bin
    文件夹中,因此要显示
    PATH
    java\u HOME
    不重要,请运行完全限定的
    java
    命令。在我的机器上,我得到以下输出(实际路径不同,版本也不同,但不管怎样):

    C:\>“C:\ProgramFiles(x86)\Java\jre1.8.0\u 261\bin\Java”-版本
    java版本“1.8.0_181”
    Java(TM)SE运行时环境(build 1.8.0_181-b13)
    Java HotSpot(TM)64位服务器虚拟机(构建25.181-b13,混合模式)
    
    C:\>C:\foo\openjdk-11.0.8\bin\java-version
    openjdk版本“11.0.2”2019-01-15
    OpenJDK运行时环境18.9(构建11.0.2+9)
    OpenJDK 64位服务器VM 18.9(构建11.0.2+9,混合模式)