Java编译器API:导入自定义包不起作用

时间:2018-05-31 17:53:53

标签: java import package java-compiler-api

我正在开发一个Web项目,我在其中创建自定义.java-File,使用自定义ClassLoader加载它,使用Compiler API编译它,然后通过Reflection执行它。唯一似乎不起作用的是编译看起来像这样的文件:

package testfiles; 
import exceptions.IncorrectSolutionException; 
public class TestFile { 
  public static void testSolution() throws IncorrectSolutionException {
    //some code here
  }
}

使用Compiler-API的Diagnostic-Collector,我收到以下错误消息:

package exceptions does not exist, line 2 cannot find symbol
symbol:   class IncorrectSolutionException

包'exception'和被引用的类肯定存在,我的src文件夹的结构如下:(带有类文件的文件夹)

  • SRC
    • 例外
    • testfiles

我尝试按照建议的here设置类路径,但它不会改变任何内容。

我如何编译文件:

DiagnosticCollector< JavaFileObject > diagnostics = new DiagnosticCollector<>();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
CompilationTask task = compiler.getTask(null, fileManager, diagnostics, optionList, null, files);
File file = new File(absolute path);
//I am using the absolute path here, because I had problems resolving the relative path as my working directory seems to be the folder eclipse is installed in.
Iterable<? extends JavaFileObject> files = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(file));
if(task.call()) {
    System.out.println("compiling File");
} else {
    //...handle Diagnostics
}

我是否必须向CompilationTask添加另一个选项,还是其他地方的问题? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

显然它必须对工作目录和Tomcat启动文件夹做一些事情。在服务器位置下配置服务器路径对我来说很有把握(把它设置为我工作区中的项目根目录)。