简短易懂版
对于有经验的读者:
- 找到Java路径;它看起来像这样:
C:\Program Files\Java\jdkxxxx\bin\
- 在开始菜单中搜索“环境变量”以打开选项对话框。
- 检查
PATH
。删除旧的Java路径。
- 将新的Java路径添加到
PATH
中。
- 编辑
JAVA_HOME
。
- 关闭并重新打开控制台/IDE。
欢迎!
你遇到了Java初学者面临的最臭名昭著的技术问题之一:'xyz'不被识别为内部或外部命令...
错误消息。
简而言之,你没有正确安装Java。在Windows上完成Java的安装需要一些手动步骤。你必须在安装Java后执行这些步骤,包括升级JDK后。
环境变量和PATH
(如果你已经理解了这个,可以跳过接下来的三个部分。)
当你运行javac HelloWorld.java
时,cmd必须确定javac.exe
的位置。这是通过PATH
环境变量实现的。
环境变量是一种特殊的键值对(例如windir=C:\WINDOWS
)。大多数环境变量随操作系统一起提供,并且一些环境变量对于系统正常运行是必需的。每个程序(包括cmd)启动时都会传递它们的列表。在Windows上,有两种类型:用户环境变量和系统环境变量。
你可以像这样查看你的环境变量:
C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\craig\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
...
最重要的变量是PATH
。它是一个由;
分隔的路径列表。当在cmd中输入命令时,列表中的每个目录都将被扫描以查找匹配的可执行文件。
在我的电脑上,PATH
是:
C:\>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower
Shell\v1.0\;C:\ProgramData\Microsoft\Windows\Start Menu\Programs;C:\Users\craig\AppData\
Roaming\Microsoft\Windows\Start Menu\Programs;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\
msys64\mingw32\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\
craig\AppData\Local\Yarn\bin;C:\Program Files\Java\jdk-10.0.2\bin;C:\ProgramFiles\Git\cmd;
C:\Program Files\Oracle\VirtualBox;C:\Program Files\7-Zip\;C:\Program Files\PuTTY\;C:\
Program Files\launch4j;C:\Program Files (x86)\NSIS\Bin;C:\Program Files (x86)\Common Files
\Adobe\AGL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\iCLS Client\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\iCLS
Client\;C:\Users\craig\AppData\Local\Microsoft\WindowsApps
当你运行
javac HelloWorld.java
命令时,cmd会意识到
javac
不是一个
内部命令,然后搜索
系统PATH
和用户PATH
。它会自动进入列表中的每个目录,并检查是否存在
javac.com
、javac.exe
、javac.bat
等文件。当找到
javac
时,它会运行它。如果没有找到,则会打印出
'javac' is not recognized as an internal or external command, operable program or batch file.
。
你必须将Java可执行文件目录添加到
PATH
中。
JDK与JRE
(如果您已经了解此内容,请随意跳过本节。)
下载Java时,您可以选择以下两种类型之一:
您必须确保已安装JDK。如果只安装了JRE,则无法执行javac
,因为您的硬盘上没有Java编译器的安装。检查Windows程序列表,并确保Java软件包的名称中包含“Development Kit”这几个单词。
不要使用set
(如果您原本不打算使用,请随意跳过此部分。)
其他几个答案建议执行以下某种变体:
C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin
不要这样做。这个命令有几个主要问题:
- 这个命令会删除
PATH
中的所有其他内容,并用Java路径替换它。执行此命令后,您可能会发现其他各种命令无法正常工作。
- 您的Java路径很可能不是
C:\Program Files\Java\jdk1.7.0_09\bin
- 您几乎肯定拥有更新版本的JDK,其路径将不同。
- 新的
PATH
仅适用于当前的cmd会话。每次打开命令提示符时,都需要重新输入set
命令。
点#1和#2可以通过以下稍微更好的版本解决:
C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%
但总的来说,这只是一个糟糕的想法。
查找Java路径
正确的方法始于找到您安装Java的位置。这取决于您安装Java的方式。
Exe安装程序
您通过运行安装程序安装了Java。Oracle的安装程序将Java版本放置在C:\Program Files\Java\
(或C:\Program Files (x86)\Java\
)下。使用文件资源管理器或命令提示符导航到该目录。
每个子文件夹代表一个Java版本。如果只有一个,则已找到它。否则,请选择看起来像更新版本的那个。确保文件夹名称以jdk
开头(而不是jre
)。进入该目录。
然后进入其中的bin
目录。
现在您已经进入了正确的目录。复制路径。如果在文件资源管理器中,请单击地址栏。如果在命令提示符中,请copy提示符。
生成的Java路径应为以下形式(不带引号):
C:\Program Files\Java\jdkxxxx\bin\
压缩文件
您已经下载了一个包含JDK的.zip文件。将其解压到一个不会干扰您的随机位置;C:\Java\
是一个可接受的选择。
然后在其中找到bin
文件夹。
现在您已经进入正确的目录。复制它的路径。这就是Java路径。
请记住,永远不要移动该文件夹,否则路径将无效。
打开设置对话框
那是编辑
PATH
的对话框。有许多方法可以打开该对话框,具体取决于您的Windows版本、UI设置以及系统配置是否混乱。
尝试以下几种方法:
- 开始菜单/任务栏搜索框 » 搜索 "环境变量"
- Win + R »
control sysdm.cpl,,3
- Win + R »
SystemPropertiesAdvanced.exe
» 环境变量
- 文件资源管理器 » 在地址栏中输入
Control Panel\System and Security\System
» 高级系统设置(左侧边栏) » 环境变量
- 桌面 » 右键点击此电脑 » 属性 » 高级系统设置 » 环境变量
- 开始菜单 » 右键点击计算机 » 属性 » 高级系统设置 » 环境变量
- 控制面板(图标模式) » 系统 » 高级系统设置 » 环境变量
- 控制面板(类别模式) » 系统和安全 » 系统 » 高级系统设置 » 环境变量
- 桌面 » 右键点击我的电脑 » 高级 » 环境变量
- 控制面板 » 系统 » 高级 » 环境变量
任何一种方法都可以打开正确的设置对话框。
如果您使用的是Windows 10,则Microsoft为您提供了
新的漂亮的UI来编辑
PATH
。否则,您将看到完整的分号加密的
PATH
,挤在单行文本框中。尽最大努力进行必要的编辑,以免破坏系统。
清理 PATH
查看 PATH
。你几乎肯定有两个 PATH
变量(因为用户和系统环境变量)。你需要查看这两个变量。
检查是否存在其他 Java 路径并将其删除。它们的存在可能会引起各种冲突。(例如,如果在 PATH
中有 JRE 8 和 JDK 11,那么 javac
将调用 Java 11 编译器,它将创建版本为 55 的 .class
文件,但 java
将调用只支持到版本 52 的 Java 8 JVM,你将遇到不支持的版本错误,无法编译和运行任何程序。)通过确保 PATH
中只有一个 Java 路径来避免这些问题。而且,你也可以卸载旧的 Java 版本。记住,你不需要同时安装 JDK 和 JRE。
如果你有
C:\ProgramData\Oracle\Java\javapath
,
也要删除它。Oracle 的目的是通过创建一个
符号链接,始终指向最新的 Java 安装来解决升级后 Java 路径被破坏的问题。不幸的是,它经常指向错误的位置或者
根本无法工作。最好删除此条目并手动管理 Java 路径。
现在也是对
PATH
进行一般性清理的好时机。如果您的 PC 上没有安装与软件相关的路径,可以将其删除。您还可以重新排列路径的顺序(如果您关心这样的事情)。
添加到 PATH
现在,将三个步骤前找到的 Java 路径放入系统
PATH
中。
您的新路径出现在列表中的任何位置都没关系;将其放在末尾是一个很好的选择。
如果您使用的是 Windows 10 之前的用户界面,请确保已正确放置分号。在列表中,每个路径之间应该恰好有一个分号。
这里真的没有什么别的可说的了。只需将路径添加到
PATH
中,然后单击“确定”。
设置 JAVA_HOME
在此过程中,您可能需要设置JAVA_HOME
。这是另一个环境变量,它应该包含Java路径。许多Java和非Java程序,包括流行的Java构建系统Maven和Gradle,如果未正确设置,则会抛出错误。
如果JAVA_HOME
不存在,请将其创建为新的系统环境变量。将其设置为Java目录的路径,不包括bin/
目录,即C:\Program Files\Java\jdkxxxx\
。
记得升级Java后也要编辑JAVA_HOME
。
关闭并重新打开命令提示符
虽然您已经修改了PATH
,但所有正在运行的程序(包括cmd)只能看到旧的PATH
。这是因为所有环境变量的列表只有在程序开始执行时才会被复制;之后,它只查询缓存副本。
没有很好的方法可以刷新cmd的环境变量,所以只需关闭命令提示符并再次打开它即可。如果您正在使用IDE,请关闭并重新打开它。
另请参阅