Моя динамическая компиляция на Java 6 работает отлично. Однако я хотел бы изменить путь вывода. Я перепробовал кучу вещей (пощажу вас), но безрезультатно. Во всяком случае, вот рабочий код
String[] filesToCompile = { "testFiles/Something.java" };
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(filesToCompile);
CompilationTask task = compiler.getTask(null, fileManager, null,null, null, compilationUnits);
System.out.println("Good? " + task.call());
Но вывод идет в исходный каталог, чего я не хочу.
Я подозреваю, что ответ может лежать в compiler.getTask
, но API не очень четко описывает, что могут означать некоторые параметры. Или, возможно, что-то с fileManager. я пробовал
fileManager.setLocation(StandardLocation.locationFor("testFiles2"), null);
но опять же, предположение, вероятно, не самая лучшая идея.
Спасибо!
Изменить: Я тоже пробовал использовать такие параметры (извините, если есть более компактный способ):
final List<String> optionsList = new ArrayList<String>();
optionsList.add("-d what");
Iterable<String> options = new Iterable<String>() {
public Iterator<String> iterator() {
return optionsList.iterator();
}
};
а затем передать параметры в getTask, но сообщение об ошибке - «Недопустимый флаг».