網頁

2018/9/14

Java 在Windows無法執行javac指令

在Windows安裝好jdk後,執行javac編譯java檔時發生類似下面錯誤,也就是找不到javac指令

C:\project>javac HelloWorld.java
'javac' is not recognized as an internal or external command, 
operable program or batch file.

首先確認你安裝的是JDK(Java Development Kit),而不是JRE(Java Runtime Environment)。注意JDK才有javac;而JRE僅有Java的runtime(JVM)執行環境而已

接著確認Windows的系統環境變數(System variables) %PATH%有加入jdk程式的執行目錄。

你可以在Windows的控制台(Control Panel) -> 系統及安全性(System and Security) -> 系統(System) -> 進階系統設定(Advanced system settings) -> 進階(Advanced tab) -> Environment Variables...找到系統變數的設定。

或直接在命令提示字元(command line)輸入sysdm.cpl ,3指令來開啟設定視窗,例如

C:\project>sysdm.cpl ,3

jdk的執行目錄位置,以Windows 64bit版本,安裝jdk 8u181版本為例,預設為
C:\Program Files\Java\jdk1.8.0_181\bin\
如果是Windows 32bit版本,則為
C:\Program Files (x86)\Java\jdk1.8.0_181\bin\

你可以在命令提示字元輸入echo %path%指令來確認path變數的內容,例如

C:\project>echo %path%

按下Enter按鈕後即會顯示如下的path變數的內容。

C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\
Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Wi
ndows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\In
tel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Comp
onents\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\I
ntel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Com
mon Files\Intel\WirelessCommon\

例如上面的path中就沒有jdk的執行目錄位置。

如果你確認path變數中確實設定了jdk執行目錄位置,且輸入java -version指令也正常顯示java版本資訊,則可能是你的jdk執行目錄位置是擺在path變數的最後,導致在執行指令時會先找到其他的java位置(可能是Windows預設的),只要把jdk執行目錄位置移到path變數的最前面即可,例如原本是

C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\
Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Wi
ndows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\In
tel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Comp
onents\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\I
ntel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Com
mon Files\Intel\WirelessCommon\;C:\Program Files\Java\jdk1.8.0_181\bin\

改到最path變數的最前面如下

C:\Program Files\Java\jdk1.8.0_181\bin\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\
Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Wi
ndows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\In
tel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Comp
onents\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\I
ntel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Com
mon Files\Intel\WirelessCommon\

最後你可以用where java指令來確認你的jdk路徑是在最前面的。

C:\project>where java
C:\Program Files\Java\jdk1.8.0_181\bin\java.exe
C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe


沒有留言:

張貼留言