在eclipse插件运行时编译java类

ggazkfy8  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(233)

我现在处境很尴尬。我正在开发一个“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文件夹中找到),动态加载它,然后从中编译?
还有什么我想不出的解决办法吗
你有什么建议?

v7pvogib

v7pvogib1#

您可以使用EclipseJDT编译器,如中所述http://help.eclipse.org/indigo/index.jsp?topic=%2forg.eclipse.jdt.doc.isv%2fguide%2fjdt_api_compile.htm.

相关问题