javac不被识别为内部或外部命令,可操作程序或批处理文件


253

尝试编译Java程序时遇到错误。

我在Windows上(这是Windows特定的问题),并且我安装了最新的JDK。

我尝试了一个涉及PATH变量的解决方案,但错误仍然存​​在。

控制台输出:

C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.java
'javac' is not recognized as an internal or external command,
operable program or batch file.

7
我认为你的道路没有定下来。转到您的环境变量并设置路径
罗恩

2
这个问题似乎不太重要,因为在实际的JDK安装说明中很容易找到它,并且该问题的答案是最新的,并且比这里的任何答案质量更高。在所有官方入门教程的第一章中,也可以轻松地在所有平台上使用它。
杰森C

8
Ta提供了有关Jason C的信息。但我承认,我发现将该主题称为脱话题的决定似乎与其他支持该答案的人数有所不同。正如我即将要做的。
马特·史蒂文斯


添加新变量更加容易,一旦创建了新变量“ PATH”,请确保添加分号(;)和值的末尾。
Amir Md Amiruzzaman 2015年

Answers:


434

TL; DR

对于有经验的读者:

  1. 查找Java路径;它看起来像这样:C:\Program Files\Java\jdkxxxx\bin\
  2. 在开始菜单中搜索“环境变量”以打开选项对话框。
  3. 检查PATH。删除旧的Java路径。
  4. 将新的Java路径添加到PATH
  5. 编辑JAVA_HOME
  6. 关闭并重新打开控制台/ IDE。

欢迎!

您遇到了Java初学者面临的最臭名昭著的技术问题之一:'xyz' is not recognized as an internal or external command...错误消息。

简而言之,您尚未正确安装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.javacmd时,当意识到这javac不是内部命令时,将在用户之后搜索系统PATHPATH。它机械地进入列表中的每个目录中,并且如果检查javac.comjavac.exejavac.bat的存在。找到时javac,它将运行它。如果没有,则打印'javac' is not recognized as an internal or external command, operable program or batch file.

您必须将Java可执行文件目录添加到PATH

JDK与JRE

(如果您已经了解这一点,请随时跳过本节。)

下载Java时,可以选择以下选项:

  • Java运行时环境(JRE),其中包括必要的工具来运行Java程序,但编译新的-它包含java但不是javac
  • Java开发工具包(JDK),它同时包含javajavac,与其他开发工具主机一起。JDK是JRE的超集。

您必须确保已安装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

不要那样做。该命令有几个主要问题:

  1. 此命令从中擦除所有其他内容PATH并将其替换为Java路径。执行此命令后,您可能会发现其他各种命令不起作用。
  2. 您的Java路径可能不是 C:\Program Files\Java\jdk1.7.0_09\bin –几乎可以肯定的,您拥有的JDK的更新版本将具有不同的路径。
  3. 新内容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目录。

您现在位于正确的目录中。复制路径。如果在文件资源管理器中,请单击地址栏。如果在命令提示符,复制提示。

生成的Java路径应采用(不带引号)的形式:

C:\Program Files\Java\jdkxxxx\bin\

压缩文件

您已经下载了包含JDK的.zip。将其提取到不会妨碍您的随机位置;C:\Java\是可以接受的选择。

然后在其中找到该bin文件夹。

您现在位于正确的目录中。复制其路径。这是Java路径。

切记永远不要移动文件夹,因为那样会使路径无效。

打开设置对话框

那是要编辑的对话框PATH。进入该对话框的方式有很多,具体取决于您的Windows版本,UI设置以及系统配置的混乱程度。

尝试其中的一些:

  • 开始菜单/任务栏搜索框»搜索“环境变量”
  • 赢+ R» control sysdm.cpl,,3
  • Win + R» SystemPropertiesAdvanced.exe»环境变量
  • 文件资源管理器»在地址栏中输入Control Panel\System and Security\System»高级系统设置(最左侧,在侧边栏中)»环境变量
  • 桌面»右键单击此PC»属性»高级系统设置»环境变量
  • 开始菜单»右键单击计算机»属性»高级系统设置»环境变量
  • 控制面板(图标模式)»系统»高级系统设置»环境变量
  • 控制面板(分类模式)»系统和安全性»系统»高级系统设置»环境变量
  • 桌面»右键单击我的电脑»高级»环境变量
  • 控制面板»系统»高级»环境变量

这些中的任何一个都应带您到正确的设置对话框。

如果您使用的是Windows 10,Microsoft会为您提供一个精美的新UI进行编辑,为您祝福PATH。否则,您会看到PATH它充满了分号,充满了荣耀,并挤进了单行文本框中。尽最大努力进行必要的编辑,而不会破坏系统。

清洁 PATH

看看PATH。您几乎肯定有两个PATH变量(由于用户变量与系统环境变量有关)。您需要同时查看它们。

检查其他Java路径并删除它们。它们的存在会引起各种冲突。(例如,如果您按此PATH顺序在JRE 8和JDK 11中,javac则将调用Java 11编译器,该Java 11编译器将创建55版.class文件,但是java将调用Java 8 JVM,该Java 8 JVM仅支持最高52版,并且您将遇到不受支持的版本错误,并且无法编译和运行任何程序。)通过确保在中只有一个Java路径来回避这些问题PATH。在使用它的同时,您也可以卸载旧的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构建系统MavenGradle)都会引发错误。

如果JAVA_HOME不存在,请将其创建为新的系统环境变量。将其设置为不带bin/目录的Java目录的路径,即C:\Program Files\Java\jdkxxxx\

记住JAVA_HOME在升级Java之后也要进行编辑。

关闭并重新打开命令提示符

尽管您已进行了修改PATH,但所有正在运行的程序(包括cmd)都只能看到旧的PATH。这是因为所有环境变量的列表仅在开始执行时才复制到程序中。此后,它仅查询缓存的副本。

没有刷新cmd的环境变量的好方法,因此只需关闭命令提示符并再次打开即可。如果您使用的是IDE,也请关闭并重新打开它。

也可以看看


7
这对我有用,但是在我尝试在Path字符串末尾添加位置之前。为什么只在一开始就起作用?
Eric H.

4
谢谢!这对我有用!@Eric H:在末尾添加对我有用。据我了解,它从左到右依次经过Path并查找javac.exe。因此,也许您将其保存在最前面的某个目录中,并且javac.exe无法正常工作。
道林

36
+1关闭命令行,然后重新打开,这对我有用!
Sameh Deabes 2014年

如果我的计算机上有不同版本的jdk和jre,是否有意义?
亚伦柳

在设置这些变量以及所有这些内容的同时,我学到了很多有关OS系统的知识。谢谢男人
Aniket Jadhav


45

您输入了错误的set命令-您错过了反斜杠C:。它应该是:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin

1
我错过了这项权利,但这是我在此处发表关注时的排印错误。我确实检查了一下,所有的拼写都正确,但仍然给我同样的错误。
user987137 2011年

1
@ user987137。显然,有些错误。JDK(请注意,JDK不是JRE)是否安装在指定位置- C:\Program Files (x86)\Java\jdk1.7.0?如果是这样,cd C:\Program Files (x86)\Java\jdk1.7.0\bin然后再做javac -version什么呢?
拉古拉姆

3
即使我设置了正确的路径,在Win XP上设置JDK时也遇到了相同的错误。只需关闭命令提示符并再次将其打开即可对其进行修复。
克里斯J

@ChrisJ-这是因为新命令提示符将在新会话中启动,因此也将加载更新的环境变量。
Cyclonecode '16

17

从命令提示符处运行以下命令: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

我已经尝试过了,效果很好。


thx,这在Windows上有效
Csaba

好答案。在Windows 10上为我工作
Roger

5

如果java命令正在运行并且javac出现问题。然后首先检查jdk的bin目录中的javac.exe文件是否存在。如果存在javac.exe文件,则将其设置JAVA_HOME为系统变量。


3

检查环境变量。

在我的情况下,我在System变量用户帐户变量中都设置了JAVA_HOME ,而后者被设置为错误的Java版本。我对Path变量也有同样的问题。

之后从我的用户帐户删除JAVA_HOME从Path变量变量和消除错误的道路是正确的工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.