我需要知道JDK在我的计算机上的位置。
Java -version
在cmd中运行时,它将版本显示为“ 1.6.xx”。要在我尝试使用的计算机上查找此SDK的位置,echo %JAVA_HOME%
但仅显示“ JAVA_HOME”(因为我的环境变量中未设置“ JAVA_PATH”变量)。
我需要知道JDK在我的计算机上的位置。
Java -version
在cmd中运行时,它将版本显示为“ 1.6.xx”。要在我尝试使用的计算机上查找此SDK的位置,echo %JAVA_HOME%
但仅显示“ JAVA_HOME”(因为我的环境变量中未设置“ JAVA_PATH”变量)。
Answers:
如果您使用的是Linux / Unix / Mac OS X:
尝试这个:
$ which java
应该输出确切的位置。
之后,您可以JAVA_HOME
自己设置环境变量。
在我的计算机(Mac OS X-雪豹)中:
$ 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
where java
在Windows(至少在Windows 7中的),但是如果你真的想要一个JDK,而不是一个JRE的作品,你需要在“箱子返回目录中查找/ javac的/
ls -l $(which java) | awk '{print $11}'
Windows>开始> cmd>
C:> for %i in (javac.exe) do @echo. %~$PATH:i
如果安装了JDK,则显示路径,
例如:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe
where java
仅当可执行文件在PATH中时才起作用。如果出于某种原因,javac不在路径中,则不会返回任何结果,但这并不意味着未安装JDK。因此,通常情况下,@ grokster解决方案提出的文件搜索解决方案将保证结果(可能需要花费一些时间才能完成)。
在Windows的命令提示符下
where javac
在Windows中,默认值为:(C:\Program Files\Java\jdk1.6.0_14
数字可能会有所不同,因为它们是版本)。
Java安装程序会将几个文件放入%WinDir%\ System32文件夹中(java.exe,javaws.exe等)。当您在命令行中键入java.exe或没有完整路径的创建过程时,如果%PATH%文件夹中缺少这些内容,Windows将作为最后的手段运行它们。
您可以查找注册表中安装的所有Java版本。查看适用于64位Windows上32位Java的HKLM \ SOFTWARE \ JavaSoft \ Java运行时环境和HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java运行时环境。
这就是java本身如何查找安装的不同版本的方式。这就是为什么32位和64位版本可以共存并在不干扰的情况下正常工作的原因。
在Windows平台上简单明了:
哪里java
下面的批处理脚本将打印出现有的默认JRE。通过使用Java Development Kit替换Java Runtime Environment,可以轻松地对其进行修改以找到已安装的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
在Windows 10上,您可以通过转到控制面板> Java找到路径。在显示的面板中,您可以找到下面的屏幕快照所示的路径。在Java控制面板中,转到“ Java”选项卡,然后单击“查看和管理Java应用程序和applet的Java运行时版本和设置”描述下的“查看”按钮。
这应该在Windows 7以及其他可能的Windows新版本上运行。
Windows上的更多信息...变量java.home并不总是与运行的二进制文件位于同一位置。
如Denis The Menace所说,安装程序会将Java文件放入Program Files,还将java.exe放入System32。没有任何Java与路径相关,java -version仍然可以工作。但是,当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。
Powershell一里衬:
$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
只需执行 set
在命令行中命令即可。然后,您将看到已设置的所有环境变量。
或者,如果在Unix上,您可以简化它:
$ set | grep "JAVA_HOME"
这是特定于操作系统的。在Unix上:
which java
将显示可执行文件的路径。我不知道Windows的等效版本,但通常bin
在系统中有JDK安装文件夹PATH
:
echo %PATH%
在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
#!/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
对于Windows:
@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/
如果需要,我通过在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%"
适用于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