[英]How do I find where JDK is installed on my windows machine?
我需要知道 JDK 在我的機器上的位置。
在cmd中運行Java -version
時,它將版本顯示為“1.6.xx”。 為了在我的機器上找到這個 SDK 的位置,我嘗試使用echo %JAVA_HOME%
但它只顯示“JAVA_HOME”(因為我的環境變量中沒有設置“JAVA_PATH”變量)。
如果您使用的是 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
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 中的命令提示符處
where javac
在 Windows 中,默認值為: C:\Program Files\Java\jdk1.6.0_14
(其中數字可能不同,因為它們是版本)。
在 Windows 平台上簡單明了:
java在哪里
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 用於 64 位 Windows 上的 32 位 java。
這就是 java 本身發現安裝的不同版本的方式。 這就是為什么 32 位和 64 位版本可以共存並在不干擾的情況下正常工作的原因。
在 Windows 下,您可以使用
C:>dir /b /s java.exe
在 C: 驅動器上打印每個“java.exe”的完整路徑,無論它們是否在 PATH 環境變量中。
下面的批處理腳本將打印出現有的默認 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
在 Windows 命令提示符下,只需鍵入:
set java_home
或者,如果您不喜歡命令環境,可以從以下位置進行檢查:
開始菜單 > 計算機 > 系統屬性 > 高級系統屬性。 然后打開高級選項卡 > 環境變量並在系統變量中嘗試找到 JAVA_HOME。
Powershell 一班:
$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
有關 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 。
從命令行運行這個程序:
// File: Main.java
public class Main {
public static void main(String[] args) {
System.out.println(System.getProperty("java.home"));
}
}
$ javac Main.java
$ java Main
在 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
您是否嘗試過查看 %PATH% 變量。 這就是 Windows 用來查找任何可執行文件的方法。
只需在命令行中執行set
命令。 然后你會看到你設置的所有環境變量。
或者如果在 Unix 上你可以簡化它:
$ set | grep "JAVA_HOME"
這是特定於操作系統的。 在 Unix 上:
which java
將顯示可執行文件的路徑。 我不知道 Windows 等價物,但您通常在系統PATH
中有 JDK 安裝的bin
文件夾:
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
命令是包裝真實 JDK 的JavaVM.framework
的一部分:
$ 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
如果您正在尋找包含以下子目錄的主目錄,那么這些答案都不適用於 Linux:bin、docs、include、jre、lib 等。
在用於 openjdk1.8.0 的 Ubuntu 上,它位於: /usr/lib/jvm/java-1.8.0-openjdk-amd64
您可能更喜歡將它用於JAVA_HOME
,因為如果您構建 JNI 源文件,您將能夠找到標頭。 雖然確實which java
將提供二進制路徑,但它不是真正的 JDK 主頁。
也許上述方法有效......我嘗試了一些但沒有為我服務。 做了什么:
在終端中運行它:
/usr/libexec/java_home
#!/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/
在 Windows cmd 中:
set "JAVA_HOME"
如果需要,我通過在 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
簡單方法(Windows):使用java打開一個應用程序。 按 ctrl + shift + esc
右鍵單擊 OpenJDK 平台二進制文件。 單擊打開文件位置。 然后它將顯示 java/javaw.exe 然后轉到顯示文件夾的頂部並單擊 jdk 然后右鍵復制路徑,繁榮。 (不適用於使用捆綁的 jre 路徑/運行時的應用程序,因為它會顯示捆綁運行時的路徑)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.