ToolProvider.getSystemJavaCompiler() 返回 null - 可用,仅安装 JRE?
我正在尝试使用JavaCompiler类:
当我调用 ToolProvider.getSystemJavaCompiler() 时,它返回 null。
我认为这是因为我使用的是JRE而不是JDK。
问题是我希望它在所有平台上运行,无论用户使用JRE还是JDK的天气如何。
如果有人知道如何解决此问题,或者使用其他方法,请发表评论。
任何帮助将不胜感激。
我正在尝试使用JavaCompiler类:
当我调用 ToolProvider.getSystemJavaCompiler() 时,它返回 null。
我认为这是因为我使用的是JRE而不是JDK。
问题是我希望它在所有平台上运行,无论用户使用JRE还是JDK的天气如何。
如果有人知道如何解决此问题,或者使用其他方法,请发表评论。
任何帮助将不胜感激。
ToolProvider.getSystemJavaCompiler() 不可用。
类路径中是否缺少工具.jar?
Set class path to the tools.jar
可以在 jdk\jre 目录中找到的文件。
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
下面介绍如何在未安装 JDK 时从应用程序运行 Java 编译器。
首先,将 JDK 中的工具.jar文件与 Java 应用一起包含在其中,并将工具.jar放在类路径中。甲骨文可能不喜欢你这样做。但是,有法律上的解决方法。您可以从 openjdk.org(openjdk),RedHat(IcedTea)或Azul Systems(Zulu)提供的免费JDK中获取工具.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);