在Eclipse插件的运行时编译Java类
我现在处境很尴尬。 我正在开发一个“Eclipse插件”,它必须将.java文件“编译”成.class文件(甚至可能是一个jar) 我正在尝试使用,以便执行以下操作:在Eclipse插件的运行时编译Java类,java,eclipse-plugin,compilation,java-compiler-api,runtime-compilation,Java,Eclipse Plugin,Compilation,Java Compiler Api,Runtime Compilation,我现在处境很尴尬。 我正在开发一个“Eclipse插件”,它必须将.java文件“编译”成.class文件(甚至可能是一个jar) 我正在尝试使用,以便执行以下操作: public class Compiler { private JavaCompiler _javaCompiler; private StandardJavaFileManager _sjfm = null; private Files[] _filesIn; public Compil
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();
}
}
}
公共类编译器{
私有JavaCompiler\u JavaCompiler;
私有标准JavaFileManager_sjfm=null;
私有文件[]\u filesIn;
公共编译器()
{
_javaCompiler=ToolProvider.getSystemJavaCompiler();
_sjfm=_javaCompiler.getStandardFileManager(null,null,null);
}
公共void编译器文件(ArrayList字符串、String outputFolder)
{
//_javaCompiler.run
Iterable fileObject=_sjfm.getJavaFileObjectsFromString(字符串);
字符串[]选项=新字符串[]{“-d”,outputFolder};
_getTask(null,null,null,Arrays.asList(options),null,fileObject.call();
试一试{
_sjfm.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
问题是,当我调用\u sjfm=\u javaCompiler.getStandardFileManager(null,null,null)时代码>我遇到了一个NullPointerException,因为当不运行JDK时,这是一个“预期”行为(请参考此)
这在某种程度上对我有所帮助,但是从必须可发布的Eclipse插件中编译Java文件的正确方法是什么呢
使用另一种“编译器”,只包含jar并使用它们
在我的插件中包含tools.jar(可以在JDK文件夹中找到),动态加载它,然后从中编译李>
还有其他我想不出的解决办法吗
你推荐什么 您可以使用Eclipse JDT编译器,如中所述。您可以尝试使用Eclipse JDT编译器:是的,我同意这个想法。我知道eclipse有自己的编译器,但从未想过使用它。贴出答案,我会接受的。