在Eclipse插件的运行时编译Java类

时间:2013-06-05 22:17:37

标签: java eclipse-plugin compilation java-compiler-api runtime-compilation

我在这里处境非常尴尬。 我正在开发一个'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时的“预期”行为(请参阅此bug report

这个StackOverflow post在某种程度上帮助了我,但是从Eclipse插件中编译Java文件的正确方法是什么呢?

  1. 使用替代“编译器”并只包含jar并使用它们?
  2. 在我的插件中包含tools.jar(在JDK文件夹中找到),动态加载它并从中编译?
  3. 我无法想到的任何其他解决方案
  4. 你会推荐什么?

1 个答案:

答案 0 :(得分:1)