25

我正在尝试使用JavaCompiler类:

当我调用ToolProvider.getSystemJavaCompiler()时,它返回 null。

我认为这是因为我使用的是 JRE 而不是 JDK。

问题是我希望它在所有平台上运行,无论用户使用 JRE 或 JDK 的天气如何。

如果有人知道如何解决此问题或使用其他方法,请发表评论。

任何帮助,将不胜感激。

4

8 回答 8

11

ToolProvider.getSystemJavaCompiler() 不可用。

类路径中是否缺少 tools.jar?

Set class path to the tools.jar可以在 jdk\jre 目录中找到的文件。

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");

于 2013-10-07T20:17:46.270 回答
5

以下是未安装 JDK 时如何从应用程序运行 Java 编译器。

首先,将 JDK 中的 tools.jar 文件包含在您的 Java 应用程序中,并将 tools.jar 放入您的类路径中。Oracle 可能不喜欢你这样做。但是,有合法的解决方法。您可以从 openjdk.org (openjdk)、RedHat (IcedTea) 或 Azul Systems (Zulu) 提供的免费 JDK 中获取 tools.jar 文件。

接下来,不使用 ToolProvider.getSystemJavaCompiler() 和 JavaCompiler 类,而是直接调用位于 tools.jar 中的编译器。下面是代码片段:

String classpath = ...; // make sure tools.jar is in this path 
String sourcepath = ...; // path to your sources
String putputpath = ...; // directory for generated class files
String filepath = ...; // file path the file you want to compile

String[] args = new String[] {
"-classpath", classpath,
"-sourcepath", sourcepath,
"-d", putputpath,
filePath
};
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
int compileStatus = javac.compile(args);
于 2014-06-05T06:10:13.827 回答
4

我认为这是问题所在。明确指定您使用的 java.exe 版本作为 JDK 目录中的版本。

详情见这里

于 2013-03-20T00:56:07.897 回答
3

另一个解决方案来自: - http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7181951

将 JDK_HOME/lib/ 中的 tools.jar 复制到 JRE_HOME/lib/ 中。至少对我来说,它神奇地解决了我的问题!

(我没有按照上面的建议做任何事情。我只是在那里复制了它。)

于 2015-05-13T07:03:55.893 回答
3

只需将 tools.jar 文件从 /lib 复制到它就可以了

您可以通过 System.out.println(System.getProperty("java.home")) 获取

大多数时候它就像 C:\Program files\Java\jre(version) [for windows]

于 2016-12-04T04:46:25.397 回答
0

在 Mac 上,这对我有用:

  System.setProperty("java.home", "/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home");
  javax.tools.JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

(由于某种原因,它不适用于 idk 10)。

于 2018-04-07T15:44:20.553 回答
0

我的 buildPath 中有 JRE 和 JDK ...我刚刚删除了 JRE 并修复了它。

于 2018-10-15T13:28:06.123 回答
0

这是对我有用的简单解决方案

我刚刚将 jre 系统库更改为 .....Program Files\Java\jdk1.7.0_55\jre 而不是 ....Program Files\Java\jdk1.7.0_55\bin ,它对我有用。

于 2016-07-18T04:56:07.220 回答