Java PowerShell 无法识别
Java not recognized on PowerShell
我在 Windows 2012 服务器上使用 PowerShell,我从 System32 中删除了所有 java 命令,重新安装 jdk,设置 JAVA_HOME 和路径指向在新安装。我仍然收到以下错误:
java : The term 'java' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ java
+ ~~~~
+ CategoryInfo : ObjectNotFound: (java:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
- PATH 需要指向 JDK/JRE 安装中的 bin/ 目录
- JAVA_HOME需要指向JDK/JRE
的顶层目录
我怀疑您将 PATH 设置为不包含 java 可执行文件的 JDK/JRE 文件夹,因为它位于 bin/ 子目录中...
1) 我的默认 JAVA_HOME 是:
echo %JAVA_HOME%
D:\Program Files\Java\jdk1.7.0_25
<= The installer automagically configures this when you install a JRE
2) 我的默认 %PATH% 不 包括 any Java
3) 我可以从 Windows 命令提示符 运行(但不能编译)Java:
java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
4) 我也可以从 Powershell 内部(或从 .ps1 Powershell 脚本)执行完全相同的操作:
PS D:\temp> java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
I deleted all the java commands from System32
这就是 Windows 找不到 java.exe 的原因。默认的 JRE 安装将 Java 放入您的 System32 目录,这是 CMD 和 Powershell 通常可以找到它的地方。
您可以通过 运行 管理员 shell 的以下命令为您的系统修复此问题。这会在您的 Windows 目录中创建 java.exe 的副本。 (你也可以用软 link)
fsutil hardlink create (join-path $env:SystemRoot 'java.exe') (join-path $env:JAVA_HOME 'bin\java.exe')
如果您不想(或不能)修改您的 Windows 目录,您可以随时设置一个别名以在您的 Powershell 会话中使用。
Set-Alias -Name java -Value (Join-Path $env:JAVA_HOME 'bin\java.exe')
运行 当前会话中的那一行和命令行中的 运行 java
应该可以正常工作。如果您希望它在所有未来的 Powershell 会话中工作,请将其添加到您的 $PROFILE
。
我在 Windows 2012 服务器上使用 PowerShell,我从 System32 中删除了所有 java 命令,重新安装 jdk,设置 JAVA_HOME 和路径指向在新安装。我仍然收到以下错误:
java : The term 'java' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ java
+ ~~~~
+ CategoryInfo : ObjectNotFound: (java:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
- PATH 需要指向 JDK/JRE 安装中的 bin/ 目录
- JAVA_HOME需要指向JDK/JRE 的顶层目录
我怀疑您将 PATH 设置为不包含 java 可执行文件的 JDK/JRE 文件夹,因为它位于 bin/ 子目录中...
1) 我的默认 JAVA_HOME 是:
echo %JAVA_HOME%
D:\Program Files\Java\jdk1.7.0_25
<= The installer automagically configures this when you install a JRE
2) 我的默认 %PATH% 不 包括 any Java
3) 我可以从 Windows 命令提示符 运行(但不能编译)Java:
java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
4) 我也可以从 Powershell 内部(或从 .ps1 Powershell 脚本)执行完全相同的操作:
PS D:\temp> java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
I deleted all the java commands from System32
这就是 Windows 找不到 java.exe 的原因。默认的 JRE 安装将 Java 放入您的 System32 目录,这是 CMD 和 Powershell 通常可以找到它的地方。
您可以通过 运行 管理员 shell 的以下命令为您的系统修复此问题。这会在您的 Windows 目录中创建 java.exe 的副本。 (你也可以用软 link)
fsutil hardlink create (join-path $env:SystemRoot 'java.exe') (join-path $env:JAVA_HOME 'bin\java.exe')
如果您不想(或不能)修改您的 Windows 目录,您可以随时设置一个别名以在您的 Powershell 会话中使用。
Set-Alias -Name java -Value (Join-Path $env:JAVA_HOME 'bin\java.exe')
运行 当前会话中的那一行和命令行中的 运行 java
应该可以正常工作。如果您希望它在所有未来的 Powershell 会话中工作,请将其添加到您的 $PROFILE
。