我在这里处于一个非常尴尬的境地。我正在开发一个“Eclipse 插件”,它必须将 .java 文件“编译”成 .class 文件(甚至可能是一个 jar)。
我正在尝试使用Java Compiler API来执行以下操作:
public class Compiler {
private JavaCompiler _javaCompiler;
private StandardJavaFileManager _sjfm = null;
private Files[] _filesIn;
public Compiler()
{
_javaCompiler = ToolProvider.getSystemJavaCompiler();
_sjfm = _javaCompiler.getStandardFileManager(null, null, null);
}
public void CompileFiles(ArrayList<String> strings, String outputFolder)
{
//_javaCompiler.run
Iterable fileObject = _sjfm.getJavaFileObjectsFromStrings(strings);
String[] options = new String[]{"-d", outputFolder};
_javaCompiler.getTask(null, null, null, Arrays.asList(options), null, fileObject).call();
try {
_sjfm.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
问题是,当我打电话时_sjfm = _javaCompiler.getStandardFileManager(null, null, null);
遇到 NullPointerException 因为,这是不运行 JDK 时的“预期”行为(请参阅此错误报告)
这篇StackOverflow 帖子在某种程度上帮助了我,但是从必须可发布的 Eclipse 插件中编译 Java 文件的正确方法是什么?
- 使用替代的“编译器”,只包含罐子并使用它们?
- 在我的插件中包含 tools.jar(位于 JDK 文件夹中),动态加载它并从中编译?
- 我想不出的任何其他解决方案
你会推荐什么 ?