Task.Call()无效 - Eclipse插件

时间:2016-06-22 06:47:00

标签: java eclipse eclipse-plugin

我正在创建一个Eclipse插件,它在点击插件按钮时编译JAVA文件。

感谢StackOverflow Question,MadProgrammer提供了完美的解决方案。我现在有一个可以从外部文件夹编译和运行类的项目。

现在,我正在尝试将其移植到插件中。我创建了命令并尝试将相同的代码插入插件代码但没有任何反应。我发现task.call()无效。

MadProgrammer在JAVA项目类中的代码:

     DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
     StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
     List<String> optionList = new ArrayList<String>();
     optionList.add("-classpath");
     optionList.add(System.getProperty("java.class.path") + ";dist/InlineCompiler.jar");
     Iterable<? extends JavaFileObject> compilationUnit = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(listOfFiles));
     JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnit);
     if (task.call()) { 
           //insert logic here 
     }

我发现的唯一区别是,如果我在JAVA类中运行代码,System.getProperty("java.class.path")将返回JAVA项目的构建路径。但是,当我将代码作为插件运行时,相同的代码返回: C:\Users\xxxxxx\Desktop\eclipse\plugins\org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar

我不确定这是否真的是compiler.getTask()无效的原因。除此之外,其他一切都是相同的:这包括要编译的类,jdk版本等。

非常感谢您对我应该做什么的任何意见或建议!

谢谢!

更新:我发现JAVA项目即使没有:

 List<String> optionList = new ArrayList<String>();
 optionList.add("-classpath");
 optionList.add(System.getProperty("java.class.path") + ";dist/InlineCompiler.jar");

并在compiler.getTask()的选项列表中设置null,所以我正在查看正在编译的文件,但到目前为止,它们是相同的,但是包中的包的名称是例外的。 implements

第二次更新:诊断显示以下错误:package xxxxplugin_handlers.CheckHandler does not existmethod does not override or implement a method from a supertype

这是我正在尝试编译的文件的片段:

public class checkClass implements xxxxplugin.handlers.CheckHandler.DoStuff{

@Override
public String doStuff(String code)
{
    //class function here
}

0 个答案:

没有答案