Я работаю над веб-проектом, в котором я создаю собственный файл .java, загружаю его с помощью пользовательского ClassLoader, компилирую его с помощью API-интерфейса компилятора и затем выполняю его с помощью Reflection.Единственное, что не работает, это компилирует файл, который выглядит так:
package testfiles;
import exceptions.IncorrectSolutionException;
public class TestFile {
public static void testSolution() throws IncorrectSolutionException {
//some code here
}
}
Используя Диагностический сборщик API-интерфейса компилятора, я получаю следующее сообщение об ошибке:
package exceptions does not exist, line 2 cannot find symbol
symbol: class IncorrectSolutionException
Пакет «исключения» и указанный класс определенно существуют, и моя папка src имеет такую структуру: (также папка с файлами классов)
- src
- исключения
- тестовые файлы
Я попытался установить путь к классу в соответствии с рекомендациями здесь , но это ничего не меняет.
Как мне скомпилировать файл:
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 или проблема в другом месте?Заранее спасибо!