无法找到 javac 编译器 com.sun.tools.javac.Main 不在类路径错误上

Unable to find a javac compiler com.sun.tools.javac.Main is not on the classpath error

我正在尝试 运行 java 应用程序,但出现以下错误,

Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK

我已经解决了很多 SO 问题,发现解决方案是 JAVA_HOME 应该指向 JDK,而不是 JRE

然后我尝试在命令提示符中打印 JAVA_HOME,

我已经从我的计算机->属性->环境变量->系统变量中设置了这个JAVA_HOME,如下所示,

我还在 eclipse 中使用首选项添加了新变量,

最后我仍然遇到同样的错误。 JAVA_HOME 怎么了?

Update :

eclipse-preferences-installed jres 中只有一个条目存在,jdk 并被选中,

而在project propertiesjava build path-libraries下有JRE System Liberary [jdk1.8.0_31]被使用。

Update 1 :

C:\Program Files\Java\jdk1.8.0_31 有名为 jre 的文件夹。是 jre 文件夹导致了这个问题吗?我可以删除这个文件夹吗?有没有办法在项目中只添加 jdk 库?

Eclipse 是一个 IDE,因此,它(至少)有两个 Java 版本:一个它自己用于 运行 (JAVA_HOME)以及用于 运行 您的应用程序的 JVM。两者不需要相同

因此,要解决您的问题,您需要查看 Eclipse 的首选项,特别是 Installed JREs,它为您提供了 Java 个 Eclipse 将用于 运行 [=43] 的 VM 列表=] 来自项目的代码。我的猜测是那里会有几个条目,默认情况下将是 JRE 而不是 JDK.

确保列表中有 JDK,然后转到您的项目。在项目中,可以select在Java Build Path下使用哪个JavaVM -> Libraries.

[编辑] 仔细查看最后一张屏幕截图:您已将 Eclipse 配置为使用 C:\Program Files\Java\jdk1.8.0_31\jre,这意味着您已将其指向 JDK 内的 JRE。请改用 C:\Program Files\Java\jdk1.8.0_31(末尾没有 \jre)。

[编辑 2] 如果删除 jre 文件夹,Java 将停止工作。任何 JDK 也包含一个 JRE。 JRE 包含 rt.jarString.class 等。 Java 编译器在 tools.jar 中,它在 JDK.

如果在 Eclipse 中重新创建 JRE 条目没有帮助,您必须手动将其添加到类路径中。

您可以使用变量 ("Add Variable...") 来确保 Eclipse 在您切换到 new/different JRE 时更新路径。试试 JAVA_HOME 扩展名 lib/tools.jar

  1. 在 Eclipse 中单击 运行->外部工具->外部工具配置
  2. 单击 JRE 选项卡
  3. 单击已安装的 JRE... 按钮
  4. 单击“添加”按钮(select 标准 VM,如果适用)
  5. 单击目录按钮
  6. 浏览到您安装的 Java 的 JDK 版本(不是 JRE)(例如:C:\Program Files\Java\jdk1.7.0_04)
  7. 单击“完成”。
  8. Re-运行Ant脚本-玩得开心!

我在命令提示符下使用 ant 时遇到了同样的问题,我找到的解决方案是您需要将 tools.jar 放在 bin 文件夹中,该文件夹位于 apache ant 文件夹中。

例如:- D:\apache-ant-1.10.12-bin\lib

你会在里面得到 tools.jar C:\程序Files\Java\jdk1.8.0_211\lib

请根据您的java安装路径更改路径。