java - 在 Eclipse Plugin 运行时编译 Java 类

标签 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. 我想不出的任何其他解决方案

你会推荐什么?

最佳答案

关于java - 在 Eclipse Plugin 运行时编译 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16950845/

相关文章:

java - 广告不可见。不刷新添加。从现在开始安排广告刷新 60000 毫秒

java - 如何正确创建复选框数组?或者我的错误是什么?

linux - 用于 Eclipse (TEE) 的 TFS 插件 checkin 多个项目时超时

java - Mule standalone(命令行)无法在其类文件夹中找到文件

Eclipse 插件 - 与文件扩展名和透视图关联的编辑器

c++ - 如何使用 g++ 包含预编译的 .h.gch 头文件

c# - 是否可以从 Visual Studio 编译 C# 程序以在 Mac 上运行?

java - MySQL+Java webService+Android 客户端 : Is is better to make multiple queries or one big?

python - Cython 尝试编译两次,但失败了

java - Wildfly 信任库和轴