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

use*_*137 248 java path javac environment-variables command-prompt

我在尝试编译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.
Run Code Online (Sandbox Code Playgroud)

小智 413

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
...
Run Code Online (Sandbox Code Playgroud)

最重要的变量是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
Run Code Online (Sandbox Code Playgroud)

当您运行时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时,您可以选择:

  • 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
Run Code Online (Sandbox Code Playgroud)

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

  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%
Run Code Online (Sandbox Code Playgroud)

但总的来说这只是一个坏主意.

找到Java路径

正确的方法从找到安装Java的位置开始.这取决于您如何安装Java.

exe安装程序

您已通过运行安装程序安装了Java.Oracle的安装程序在C:\Program Files\Java\(或C:\Program Files (x86)\Java\)下放置Java版本.使用文件资源管理器或命令提示符,导航到该目录.

每个子文件夹代表一个Java版本.如果只有一个,你就找到了它.否则,请选择看起来像较新版本的那个.确保文件夹名称以jdk(而不是jre)开头.输入目录.

然后输入该bin目录.

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

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

C:\Program Files\Java\jdkxxxx\bin\
Run Code Online (Sandbox Code Playgroud)

Zip文件

您已经下载了包含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已经为您提供了一个值得编辑的新UIPATH.否则,你将看到PATH它完整​​的分号镶嵌的荣耀,挤进一个单行文本框.尽力在不破坏系统的情况下进行必要的编辑.

清洁 PATH

看看PATH.你几乎肯定有两个PATH变量(因为用户与系统环境变量).你需要看看他们两个.

检查其他Java路径并将其删除.它们的存在可能导致各种冲突.(例如,如果您PATH按顺序安装了JRE 8和JDK 11 ,那么javac将调用Java 11编译器,它将创建版本55 .class文件,但java将调用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之前的UI,请确保已正确放置分号.应该只有一个分隔列表中的每个路径.

这里真的没什么好说的.只需添加路径,PATH然后单击"确定".

JAVA_HOME

当你在这里时,你也可以设置JAVA_HOME好.这是另一个应该包含Java路径的环境变量.许多Java和非Java程序(包括流行的Java构建系统Gradle)如果未正确设置,将抛出错误.

如果JAVA_HOME不存在,请将其创建为新的系统环境变量.将其设置为您添加到的相同Java路径PATH.

记得JAVA_HOME在升级Java之后编辑.

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

虽然您已经修改过PATH,但所有正在运行的程序(包括cmd)只能看到旧程序PATH.这是因为所有环境变量的列表仅在程序开始执行时被复制到程序中; 此后,它只参考缓存的副本.

没有好的方法来刷新cmd的环境变量,所以只需关闭命令提示符并再次打开它.如果您使用的是IDE,请关闭并重新打开它.

也可以看看

  • +1关闭命令行然后重新打开它,这对我有用! (36认同)
  • 这对我有用,但在我尝试在Path字符串末尾添加位置之前.为什么它只在一开始就有效? (7认同)
  • 谢谢!这对我有用!@Eric H:最后添加对我有用.根据我的理解,它从左到右穿过Path并查找javac.exe.所以也许你在前面的某个目录中有它,并且javac.exe不起作用. (4认同)

Ahm*_*nas 76

试试这个..我也有它但现在它在XP中解决了..

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java
Run Code Online (Sandbox Code Playgroud)


Rag*_*ram 44

你错误地输入了set命令 - 之后错过了反斜杠C:.它应该是:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Run Code Online (Sandbox Code Playgroud)

  • 在Win XP上设置JDK时遇到了同样的错误,即使我有正确的路径集.只需关闭命令提示符并再次打开它就可以修复它. (3认同)

fre*_*her 11

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

我试过这个,效果很好.


小智 5

如果java命令正在运行并且遇到javac问题.然后首先检查jdk的bin目录javac.exe文件是否存在.如果javac.exe文件存在,则设置JAVA_HOME为System变量.