У меня есть файл build.xml, который импортирует другие xml-файлы ant. Я хотел бы получить от него все задачи javac, чтобы я мог видеть, какой путь к классам установлен для этих задач (javac используется для нескольких целей). Я придумал следующий код (немного упрощённый):
public static void main(String[] args) throws Exception {
Project project = new Project();
project.init();
String build = "build.xml";
File buildFile = new File(build);
ProjectHelper.configureProject(project, buildFile);
Hashtable<String,Object>ht = project.getTargets();
for (String key : ht.keySet()) {
try {
Target target = (Target)ht.get(key);
Task[] tasks = target.getTasks();
for (Task task : tasks) {
if (task instanceof UnknownElement) {
((UnknownElement)task).maybeConfigure();
task = ((UnknownElement)task).getTask();
if (task == null) {
return;
}
}
if (task instanceof Javac) {
// here we go
}
}
} catch(Exception ignore) {}
}
}
Однако существуют такие задачи, как MacroDef
, в которые могут быть вложены другие задачи. Интерфейс TaskContainer
указывает только addTask(task)
, я не вижу способа получить вложенные задачи.
Как получить все задачи javac? Это нормально иметь решение, в котором библиотека ant не используется, но синтаксический анализ XML кажется громоздким, поскольку ant использует свойства, ссылки, файлы построения, может импортировать другие файлы и т. д.