0

我在这里处于一个非常尴尬的境地。我正在开发一个“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 文件的正确方法是什么?

  1. 使用替代的“编译器”,只包含罐子并使用它们?
  2. 在我的插件中包含 tools.jar(位于 JDK 文件夹中),动态加载它并从中编译?
  3. 我想不出的任何其他解决方案

你会推荐什么 ?

4

1 回答 1

1

您可以使用 Eclipse JDT 编译器,如http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Fguide%2Fjdt_api_compile.htm中所述。

于 2013-06-07T06:07:03.710 回答