【问题标题】:How do I find where JDK is installed on my windows machine?如何在我的 Windows 机器上找到 JDK 的安装位置?
【发布时间】:2011-06-08 12:59:27
【问题描述】:

我需要知道 JDK 在我的机器上的位置。

cmd 中运行 Java -version 时,它会显示版本为“1.6.xx”。 为了在我的机器上找到这个 SDK 的位置,我尝试使用echo %JAVA_HOME%,但它只显示“JAVA_HOME”(因为我的环境变量中没有设置“JAVA_PATH”变量)。

【问题讨论】:

  • 不幸的是,我认为下面的一些答案可能不起作用,因为最近版本的 Java 显然发生了一些变化。今天我下载了 7.60 版本的 Java SDK。经过一番搜索,在 C:\Program Files (x86)\Java\jdk1.7.0_60 找到了它。已安装旧版本 6 JRE。它位于 C:\Program Files\Java 并且位于 %PATH% 上,而不是较新的安装。
  • 最佳答案在底部,来自 majkinetor 的 PowerShell 单行代码:$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
  • 还有一件事,如果你的 jdk 与 intellij idea 捆绑在一起,它可能在 idea 安装附近的某个地方。对我来说,它位于 idea 文件夹上方的文件夹 1 目录中,PATH 变量指向 Program Files 中的 jre

标签: java windows


【解决方案1】:

如果您使用的是 Linux/Unix/Mac OS X:

试试这个:

$ which java

应该输出准确的位置。

之后,你可以自己设置JAVA_HOME环境变量。

在我的电脑中(Mac OS X - Snow Leopard):

$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 Nov  7 07:59 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

如果您使用的是 Windows:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i

【讨论】:

  • 其实%VAR_NAME%的形式是Windows
  • 用 Linux/Unix/Mac OS X Windows示例更新了答案。
  • where java 在 Windows 中工作(至少从 Windows 7 开始)但是如果你真的想要一个 JDK 而不是 JRE,你需要在返回的目录中查找 'bin/javac/
  • 如果 java.exe 在路径上,java 不会给出完整路径,而 Pablo 的 for... 解决方案这样做更可取。
  • MacOS 单行:ls -l $(which java) | awk '{print $11}'
【解决方案2】:

Windows > 开始 > cmd >

C:> for %i in (javac.exe) do @echo.   %~$PATH:i

如果您安装了 JDK,则会显示路径,
例如:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

【讨论】:

  • Windows(7+) => 其中 javac.exe
  • 在windows中是java
  • where java 仅在可执行文件位于 PATH 中时才有效。如果由于某种原因,javac 不在路径中,它不会返回任何结果,但这并不意味着没有安装 JDK。所以在一般情况下,@grokster 解决方案提出的文件搜索解决方案会保证结果(认为可能需要时间才能完成)。
  • 'for-loop' 的东西不起作用,但是,我在这里找到了它:C:\Program Files (x86)\Java\jdk1.6.0_24\bin>
  • 请注意,如果您按照此 (codelabs.developers.google.com/codelabs/…) 教程使用 android studio,实际路径不会是上述命令返回的路径。最有可能的是,你会得到类似“C:\\Program Files\Java|”的东西,而不是“jdk”,而对于 JDK 版本 10,你会得到类似“jdk-10.0.1”的东西。
【解决方案3】:

在 Windows 中的命令提示符

where javac

【讨论】:

  • 在windows中是java
  • 注意,这只适用于 javac 在 PATH 中。如果不是,这个命令会说没有找到,但是 JDK 仍然可以安装。如果安装 JDK 后 PATH 没有更新,请使用其他方法。
  • 还有什么方法?您提到在 (javac.exe) 中使用 for %i 执行 @echo。 %~$PATH:i,但正如你所写,如果你没有在 PATH 中设置它,它将无法工作。
  • 如果我有多个 JDK 怎么办?
【解决方案4】:

在 Windows 中,默认值为:C:\Program Files\Java\jdk1.6.0_14(数字可能不同,因为它们是版本)。

【讨论】:

  • 你将如何检索不同的版本号?
  • 只需从您的资源管理器逐步导航到该位置,您就会看到您安装的 jdk 文件夹版本。
【解决方案5】:

在 Windows 10 上,您可以通过转到“控制面板”>“程序”>“Java”来查找路径。在显示的面板中,您可以找到如下屏幕截图所示的路径。在 Java 控制面板中,转到“Java”选项卡,然后单击“查看和管理 Java 应用程序和小程序的 Java 运行时版本和设置”描述下的“查看”按钮。

这应该适用于 Windows 7 和可能的其他最新版本的 Windows。

【讨论】:

  • 我在 windows 10 上,控制面板中没有 java
  • 你确定Java已经安装并且是使用windows安装包安装的吗?
  • 您可以尝试查看您的帐户和系统环境变量以找出可能安装 java 的位置,查找 javacpl.exe
【解决方案6】:

Java 安装程序将几个文件放入 %WinDir%\System32 文件夹(java.exe、javaws.exe 和其他一些文件)。当您在命令行中键入 java.exe 或创建没有完整路径的进程时,如果 %PATH% 文件夹中缺少这些文件,Windows 会作为最后的手段运行这些文件。

您可以查找注册表中安装的所有 Java 版本。看看 HKLM\SOFTWARE\JavaSoft\Java Runtime Environment 和 HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment for 32-bit java on 64 bit Windows。

这就是 java 自己找出安装的不同版本的方式。这就是为什么 32 位和 64 位版本可以共存并在不干扰的情况下正常工作的原因。

【讨论】:

    【解决方案7】:

    在 Windows 平台上简单明了:

    java在哪里

    【讨论】:

    • 它会导致错误的 Java 位置 C:\WINDOWS\System32\java.exe。但是实际的 jdk 安装在 C:\Java\jdk1.7.0\ (因为设置了 JAVA_HOME)
    【解决方案8】:

    在Windows下,可以使用

    C:>dir /b /s java.exe
    

    打印 C: 驱动器上每个“java.exe”的完整路径,无论它们是否在 PATH 环境变量中。

    【讨论】:

      【解决方案9】:

      下面的批处理脚本将打印出现有的默认 JRE。通过将 Java Runtime Environment 替换为 Java Development Kit 可以轻松修改以查找安装的 JDK 版本。

      @echo off
      
      setlocal
      
      ::- Get the Java Version
      set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
      set VALUE=CurrentVersion
      reg query %KEY% /v %VALUE% 2>nul || (
          echo JRE not installed 
          exit /b 1
      )
      set JRE_VERSION=
      for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
          set JRE_VERSION=%%b
      )
      
      echo JRE VERSION: %JRE_VERSION%
      
      ::- Get the JavaHome
      set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
      set VALUE=JavaHome
      reg query %KEY% /v %VALUE% 2>nul || (
          echo JavaHome not installed
          exit /b 1
      )
      
      set JAVAHOME=
      for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
          set JAVAHOME=%%b
      )
      
      echo JavaHome: %JAVAHOME%
      
      endlocal
      

      【讨论】:

        【解决方案10】:

        在 Windows 命令提示符下,只需键入:

        set java_home
        

        或者,如果你不喜欢命令环境,你可以从:

        开始菜单 > 计算机 > 系统属性 > 高级系统属性。然后打开高级选项卡 > 环境变量并在系统变量中尝试找到 JAVA_HOME。

        【讨论】:

        • 这给了我 jdk 文件夹。当我在 Scala 工作表中运行 System.getProperty("java.home") 时,它给了我 jre 子文件夹。 Java Home 显然有些模棱两可。
        【解决方案11】:

        Powershell 一班:

        $p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
        

        【讨论】:

        • 对于 JDK 11 使用 $p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
        【解决方案12】:

        更多关于 Windows... 变量 java.home 并不总是与运行的二进制文件位于同一位置。

        正如 Denis The Menace 所说,安装程序将 Java 文件放入 Program Files,同时将 java.exe 放入 System32。在 java -version 路径上没有任何与 Java 相关的内容仍然可以工作。然而,当 PeterMmm 的程序运行时,它会将 Program Files 的值报告为 java.home,这并没有错(Java 安装在那里),但实际运行的二进制文件位于在System32中。

        一种寻找 java.exe 二进制文件位置的方法,在 PeterMmm 的代码中添加以下行以使程序运行更长时间:

        try{Thread.sleep(60000);}catch(Exception e) {}
        

        编译并运行它,然后寻找 java.exe 映像的位置。例如。在 Windows 7 中打开任务管理器,找到 java.exe 条目,右键单击并选择“打开文件位置”,这将打开 Java 二进制文件的确切位置。在这种情况下,它将是 System32

        【讨论】:

          【解决方案13】:

          从命令行运行这个程序:

          // File: Main.java
          public class Main {
          
              public static void main(String[] args) {
                 System.out.println(System.getProperty("java.home"));
              }
          
          }
          
          
          $ javac Main.java
          $ java Main
          

          【讨论】:

          • 她不需要先编译这个吗?
          • 如果 JRE 已安装并且首先在路径上,它将找到它。
          【解决方案14】:

          在 Windows PowerShell 中,您可以使用 Get-Command 函数查看 Java 的安装位置:

          Get-Command -All java
          

          或者

          gcm -All java
          

          -All 部分确保显示它出现在路径查找中的所有位置。下面是示例输出。

          PS C:> gcm -All java
          
          CommandType     Name                                               Version    Source
          -----------     ----                                               -------    ------
          Application     java.exe                                           8.0.202.8  C:\Program Files (x86)\Common Files\Oracle\Java\jav...
          Application     java.exe                                           8.0.131... C:\ProgramData\Oracle\Java\javapath\java.exe
          

          【讨论】:

            【解决方案15】:

            您是否尝试过查看 %PATH% 变量。这就是 Windows 用来查找任何可执行文件的方法。

            【讨论】:

            • 是的。 Echo %PATH%. 我的似乎在 Windows 7 上的 c:\Program Files\Java
            【解决方案16】:

            只需在命令行中执行set 命令。然后你会看到你设置的所有环境变量。

            或者如果在 Unix 上你可以简化它:

            $ set | grep "JAVA_HOME" 
            

            【讨论】:

            • 感谢 Roflcoptr,了解“set”确实很有用。在我的系统中,它显示相同变量的两个条目,我该如何删除不正确的条目。
            【解决方案17】:

            这是特定于操作系统的。在 Unix 上:

            which java
            

            将显示可执行文件的路径。我不知道 Windows 等价物,但您通常在系统 PATH 中有 JDK 安装的 bin 文件夹:

            echo %PATH%
            

            【讨论】:

            • 我也打算给出这个答案,但他显然在寻找 Windows 答案。
            • @DonBranson 他在提交这篇文章后更改了文本以包含 Windows。
            【解决方案18】:

            如果您正在寻找包含以下子目录(例如 bin、docs、include、jre、lib 等)的主目录,则这些答案都不适用于 Linux。

            在 Ubuntu for openjdk1.8.0 上,它位于: /usr/lib/jvm/java-1.8.0-openjdk-amd64

            您可能更喜欢将其用于JAVA_HOME,因为如果您构建 JNI 源文件,您将能够找到标头。虽然which java 确实会提供二进制路径,但它不是真正的 JDK 主页。

            【讨论】:

              【解决方案19】:

              在 macOS 上,运行:

              cd /tmp && echo 'public class Main {public static void main(String[] args) {System.out.println(System.getProperty("java.home"));}}' > Main.java && javac Main.java && java Main
              

              在我的机器上,打印:

              /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
              

              请注意,运行 which java 不会显示 JDK 位置,因为 java 命令是 JavaVM.framework 的一部分,它包装了真正的 JDK:

              $ which java
              /usr/bin/java
              /private/tmp
              $ ls -l /usr/bin/java
              lrwxr-xr-x  1 root  wheel  74 14 Nov 17:37 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
              

              【讨论】:

                【解决方案20】:

                在 Windows cmd 中:

                set "JAVA_HOME" 
                

                【讨论】:

                  【解决方案21】:
                  #!/bin/bash
                  
                  if [[ $(which ${JAVA_HOME}/bin/java) ]]; then
                      exe="${JAVA_HOME}/bin/java"
                  elif [[ $(which java) ]]; then
                      exe="java"
                  else 
                      echo "Java environment is not detected."
                      exit 1
                  fi
                  
                  ${exe} -version
                  

                  对于窗户:

                  @echo off
                  if "%JAVA_HOME%" == "" goto nojavahome
                  
                  echo Using JAVA_HOME            :   %JAVA_HOME%
                  
                  "%JAVA_HOME%/bin/java.exe" -version
                  goto exit
                  
                  :nojavahome
                  echo The JAVA_HOME environment variable is not defined correctly
                  echo This environment variable is needed to run this program.
                  goto exit
                  
                  :exit
                  

                  此链接可能有助于解释如何从 bash 中查找 java 可执行文件:http://srcode.org/2014/05/07/detect-java-executable/

                  【讨论】:

                  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
                  • 感谢@ShaifulIslam,您的观点是正确的。我从链接中添加了代码。
                  【解决方案22】:

                  如果需要,我通过测试 64 位和 32 位注册表中的注册表项改进了上述 munsingh 的答案:

                  ::- Test for the registry location  
                  SET VALUE=CurrentVersion
                  SET KEY_1="HKLM\SOFTWARE\JavaSoft\Java Development Kit"
                  SET KEY_2=HKLM\SOFTWARE\JavaSoft\JDK
                  SET REG_1=reg.exe
                  SET REG_2="C:\Windows\sysnative\reg.exe"
                  SET REG_3="C:\Windows\syswow64\reg.exe"
                  
                  SET KEY=%KEY_1%
                  SET REG=%REG_1%
                  %REG% QUERY %KEY% /v %VALUE% 2>nul
                  IF %ERRORLEVEL% EQU 0 GOTO _set_value
                  
                  SET KEY=%KEY_2%
                  SET REG=%REG_1%
                  %REG% QUERY %KEY% /v %VALUE% 2>nul
                  IF %ERRORLEVEL% EQU 0 GOTO _set_value
                  
                  ::- %REG_2% is for 64-bit installations, using "C:\Windows\sysnative"
                  SET KEY=%KEY_1%
                  SET REG=%REG_2%
                  %REG% QUERY %KEY% /v %VALUE% 2>nul
                  IF %ERRORLEVEL% EQU 0 GOTO _set_value
                  
                  SET KEY=%KEY_2%
                  SET REG=%REG_2%
                  %REG% QUERY %KEY% /v %VALUE% 2>nul
                  IF %ERRORLEVEL% EQU 0 GOTO _set_value
                  
                  ::- %REG_3% is for 32-bit installations on a 64-bit system, using "C:\Windows\syswow64"
                  SET KEY=%KEY_1%
                  SET REG=%REG_3%
                  %REG% QUERY %KEY% /v %VALUE% 2>nul
                  IF %ERRORLEVEL% EQU 0 GOTO _set_value
                  
                  SET KEY=%KEY_2%
                  SET REG=%REG_3%
                  %REG% QUERY %KEY% /v %VALUE% 2>nul
                  IF %ERRORLEVEL% EQU 0 GOTO _set_value
                  
                  :_set_value
                  FOR /F "tokens=2,*" %%a IN ('%REG% QUERY %KEY% /v %VALUE%') DO (
                      SET JDK_VERSION=%%b
                  )
                  SET KEY=%KEY%\%JDK_VERSION%
                  SET VALUE=JavaHome
                  FOR /F "tokens=2,*" %%a IN ('%REG% QUERY %KEY% /v %VALUE%') DO (
                      SET JAVAHOME=%%b
                  )
                  ECHO "%JAVAHOME%"
                  ::- SETX JAVA_HOME "%JAVAHOME%"
                  

                  reference for access to the 64-bit registry

                  【讨论】:

                    【解决方案23】:

                    用于 32/64 位 Windows 的脚本。

                    @echo off
                    
                    setlocal enabledelayedexpansion
                    
                    ::- Get the Java Version
                    set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
                    set KEY64="HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment"
                    set VALUE=CurrentVersion
                    reg query %KEY% /v %VALUE% 2>nul || (
                        set KEY=!KEY64!
                        reg query !KEY! /v %VALUE% 2>nul || (
                        echo JRE not installed 
                        exit /b 1
                    )
                    )
                    
                    set JRE_VERSION=
                    for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
                        set JRE_VERSION=%%b
                    )
                    
                    echo JRE VERSION: %JRE_VERSION%
                    
                    ::- Get the JavaHome
                    set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
                    set KEY64="HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
                    set VALUE=JavaHome
                    reg query %KEY% /v %VALUE% 2>nul || (
                        set KEY=!KEY64!
                        reg query !KEY! /v %VALUE% 2>nul || (
                        echo JavaHome not installed
                        exit /b 1
                    )
                    )
                    
                    set JAVAHOME=
                    for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
                        set JAVAHOME=%%b
                    )
                    
                    echo JavaHome: %JAVAHOME%
                    
                    endlocal
                    

                    【讨论】:

                      【解决方案24】:

                      也许上述方法有效...我尝试了一些但对我来说没有。这是做什么的:

                      在终端中运行:

                      /usr/libexec/java_home
                      

                      【讨论】:

                        【解决方案25】:

                        简单方法(Windows): 使用 java 打开应用程序。 按 ctrl + shift + esc

                        右键单击 OpenJDK 平台二进制文件。单击打开文件位置。 然后它将显示 java/javaw.exe 然后转到显示文件夹的顶部并单击 jdk 然后右键复制路径,繁荣。 (不适用于使用捆绑的 jre 路径/运行时的应用程序,因为它会显示捆绑运行时的路径)

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2021-12-27
                          • 1970-01-01
                          • 1970-01-01
                          • 2011-05-22
                          • 2022-07-18
                          • 2022-09-27
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多