javac 不被识别为内部或外部命令、可运行程序或批处理文件 [关闭]
Posted
技术标签:
【中文标题】javac 不被识别为内部或外部命令、可运行程序或批处理文件 [关闭]【英文标题】:javac is not recognized as an internal or external command, operable program or batch file [closed] 【发布时间】:2011-12-04 06:35:17 【问题描述】:我在尝试编译 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.
【问题讨论】:
我认为您的路径未设置。转到您的环境变量并设置路径 这个问题似乎是题外话,因为它很容易在actual JDK installation instructions 中找到,并且那里的答案是最新的并且比这里的任何答案都更高质量。在official getting started tutorial 的第一章中,它也很容易获得,适用于所有平台。 Ta 获取 Jason C 的信息。但我承认,我发现将这个线程称为离题的决定似乎与支持这个答案的其他人的数量不一致。正如我即将做的那样。 当前链接:docs.oracle.com/javase/8/docs/technotes/guides/install/… 添加新变量更容易,一旦创建了新变量“PATH”,请确保添加分号 (;) 和值的结尾。 【参考方案1】:TL;DR
对于有经验的读者:
-
找到Java路径;它看起来像这样:
C:\Program Files\Java\jdkxxxx\bin\
开始菜单搜索“环境变量”以打开选项对话框。
检查PATH
。删除旧的 Java 路径。
将新的 Java 路径添加到 PATH
。
编辑JAVA_HOME
。
关闭并重新打开控制台/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
完成的。
environment variable 是一个特殊的键值对(例如windir=C:\WINDOWS
)。大多数都随操作系统一起提供,有些是系统正常运行所必需的。它们的列表会在每个程序(包括 cmd)启动时传递给它。 On Windows,有two types:用户环境变量和系统环境变量。
你可以像这样看到你的环境变量:
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
不是internal command 时搜索system PATH
followed by the user PATH
。它机械地进入列表中的每个目录,并检查javac.com
, javac.exe
, javac.bat
, etc. 是否存在。当它找到javac
时,它会运行它。如果没有,它会打印'javac' is not recognized as an internal or external command, operable program or batch file.
您必须将 Java 可执行文件目录添加到 PATH
。
JDK 与 JRE
(如果您已经了解这一点,请随意跳过此部分。)
下载 Java 时,您可以选择:
Java Runtime Environment (JRE),包括运行 Java 程序的必要工具,但不用于编译新程序 - 它包含java
但不包含 javac
。
Java Development Kit (JDK),包含java
和javac
,以及许多其他开发工具。 JDK 是 JRE 的超集。
您必须确保您已经安装了 JDK。如果您只安装了 JRE,则无法执行 javac
,因为您的硬盘上没有安装 Java 编译器。检查您的 Windows 程序列表,并确保 Java 包的名称中包含“开发工具包”字样。
不要使用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 已为您提供了 fancy new UI 以编辑 PATH
。否则,您将看到 PATH
以完整的分号镶嵌的荣耀,挤进一个单行文本框。尽最大努力在不破坏系统的情况下进行必要的编辑。
清理PATH
看看PATH
。您几乎肯定有两个 PATH
变量(因为用户与系统环境变量)。您需要同时查看它们。
检查其他 Java 路径并删除它们。它们的存在会引发各种冲突。 (例如,如果您在 PATH
中有 JRE 8 和 JDK 11,那么 javac
将调用 Java 11 编译器,这将创建版本 55 .class
文件,但 java
将调用 Java 8 JVM,它只支持最高版本 52,您将遇到unsupported version errors 并且无法编译和运行任何程序。)通过确保您在PATH
中只有一个 Java 路径来回避这些问题。当您使用它时,您也可以uninstall old Java versions。请记住,您 don't need to have 既是 JDK 又是 JRE。
如果您有 C:\ProgramData\Oracle\Java\javapath
,也将其删除。 Oracle 打算通过创建一个始终指向最新 Java 安装的symbolic link 来解决升级后 Java 路径中断的问题。不幸的是,它通常最终指向错误的位置或simply not working。最好去掉这个条目,手动管理Java路径。
现在也是在PATH
上执行一般内务管理的好机会。如果您有与 PC 上不再安装的软件相关的路径,您可以删除它们。您还可以打乱周围路径的顺序(如果您关心这样的事情)。
添加到PATH
现在把你三步前找到的Java路径,放到系统PATH
中。
您的新路径在列表中的哪个位置无关紧要;放在最后是个不错的选择。
如果您使用的是 Windows 10 之前的用户界面,请确保您已正确放置分号。应该有一个分隔列表中的每条路径。
这里真的没什么好说的了。只需将路径添加到PATH
,然后单击确定。
设置JAVA_HOME
当您使用它时,您也可以设置JAVA_HOME
。这是另一个环境变量,它也应该包含 Java 路径。许多 Java 和非 Java 程序,包括流行的 Java 构建系统 Maven 和 Gradle,如果设置不正确,将会抛出错误。
如果JAVA_HOME
不存在,则将其创建为新的系统环境变量。设置为没有bin/
目录的Java目录路径,即C:\Program Files\Java\jdkxxxx\
。
记得在升级 Java 后编辑JAVA_HOME
。
关闭并重新打开命令提示符
虽然修改了PATH
,但所有运行的程序,包括cmd,都只能看到旧的PATH
。这是因为所有环境变量的列表仅在程序开始执行时才被复制到程序中;此后,它只查阅缓存的副本。
refresh cmd's environment variables 没有好方法,所以只需关闭命令提示符并再次打开它。如果您使用的是 IDE,请关闭并重新打开它。
另见
What are PATH and other environment variables, and how can I set or use them? How do I set or change the PATH system variable? How to set the path and environment variables in Windows How to set Path environment variables in Windows 10【讨论】:
这对我有用,但在我尝试在路径字符串末尾添加位置之前。为什么它只在开始时起作用? 谢谢!这对我有用! @Eric H:最后添加对我有用。据我了解,它从左到右通过路径并寻找 javac.exe。因此,也许您将它放在前面的某个目录中并且 javac.exe 不起作用。 +1 用于关闭命令行然后重新打开它,这对我有用! 如果我的电脑上有不同版本的 jdk 和 jre 有意义吗? 我在设置这些变量的过程中学到了很多关于操作系统的知识。谢谢人【参考方案2】:试试这个.. 我也有,但现在在 XP 中解决了..
C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java
【讨论】:
【参考方案3】:您打错了set
命令——您错过了C:
后面的反斜杠。应该是:
C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
【讨论】:
我错过了这个权利,但这是我在这里发布我的担忧时的印刷错误。我确实检查了它,所有内容都拼写正确,但仍然给我同样的错误。 @user987137。显然,有些事情是不正确的。 JDK(请注意 - JDK 不是 JRE)是否安装在指定位置 -C:\Program Files (x86)\Java\jdk1.7.0
?如果是这样,如果你先cd C:\Program Files (x86)\Java\jdk1.7.0\bin
然后javac -version
会发生什么?
我在 Win XP 上设置 JDK 时遇到了同样的错误,即使我设置了正确的路径。只需关闭命令提示符并再次打开它即可修复它。
@ChrisJ - 这是因为新的命令提示符将在新会话中启动,因此也会加载更新的环境变量。【参考方案4】:
从命令提示符运行以下命令:
set Path="C:\Program Files\Java\jdk1.7.0_09\bin"
要么
set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"
我试过了,效果很好。
【讨论】:
谢谢,这适用于 Windows 好答案。在 Windows 10 上为我工作【参考方案5】:如果 java 命令正在运行并且 javac 出现问题。然后首先检查jdk的bin目录javac.exe文件是否存在。
如果存在 javac.exe 文件,则将 JAVA_HOME
设置为系统变量。
【讨论】:
【参考方案6】:检查您的环境变量。
在我的情况下,我在 系统变量 以及 用户帐户 变量中设置了 JAVA_HOME,而后者被设置为 错误的 Java 版本。我对 Path 变量也有同样的问题。
从我的用户帐户中删除 JAVA_HOME 变量并从 Path 变量中删除错误的路径后,它可以正常工作。
【讨论】:
以上是关于javac 不被识别为内部或外部命令、可运行程序或批处理文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
exe 文件在 C++ 中不被识别为内部或外部命令、可运行程序或批处理文件
webpack 不被识别为内部或外部命令、可运行程序或批处理文件
将java添加到路径时,java.exe不被识别为内部或外部命令可运行程序或批处理文件
为啥我会收到此错误:当我使用 tailwindcss 时,'postcss' 不被识别为内部或外部命令、可运行程序或批处理文件