#java #ant
#java #ant
Вопрос:
Я пытаюсь выполнить цель Ant из Java для поиска каталогов по критериям. Если запустить searchDirectories
из консоли, результат в порядке, если из класса Java, каталоги не найдены.
File buildFile = new File("build.xml");
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
try {
p.fireBuildStarted();
p.fireSubBuildStarted();
p.executeTarget("searchDirectories");
} catch (IOException e) {
p.fireBuildFinished(e);
}
РЕДАКТИРОВАТЬ: Если я вызываю Ant из каталога, в котором содержится build.xml будут найдены каталоги. В противном случае, когда ant выполняется через эту строку, результат неверен.
ant -buildfile D:Projectsantproj searchDirectories
Я не могу понять, в чем проблема?
Комментарии:
1. Как насчет
Runtime#exec(String)
? Вы можете выполнить ту же команду, которую используете в своей командной строке.2. битнгу13, это все равно не работает
Ответ №1:
Вы можете запустить Ant из Java и распечатать выходные данные в System.out
следующим образом (обратите внимание, что -buildfile
это то же самое, что -file
или -f
):
ProcessBuilder builder = new ProcessBuilder("ant", "-f", "/path/to/build.xml", "searchDirectories");
Process process = builder.start();
try (BufferedReader out = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
out.lines().collect(Collectors.toList()).forEach(System.out::println);
}
Если ваша searchDirectories
задача выдает неправильные результаты, возможно, соответствующая <target>
содержит ошибку.