我现在处境很尴尬。我正在开发一个“eclipse插件”,它必须将.java文件编译成.class文件(甚至可能是jar)。
我尝试使用java编译器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文件的正确方法是什么呢?
使用另一种“编译器”,只包含jar并使用它们?
在我的插件中包含tools.jar(可以在jdk文件夹中找到),动态加载它,然后从中编译?
还有什么我想不出的解决办法吗
你有什么建议?
1条答案
按热度按时间v7pvogib1#
您可以使用EclipseJDT编译器,如中所述http://help.eclipse.org/indigo/index.jsp?topic=%2forg.eclipse.jdt.doc.isv%2fguide%2fjdt_api_compile.htm.