2016-10-22 2 views
1

Я пытаюсь выполнить Ant-цель от Java для поиска каталогов по критериям. Если вы запускаете searchDirectories с консоли, результат получается ОК, если из класса Java каталоги не найдены.Ant: Как выполнить Ant от 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); 
} 

EDIT: Если я позвоню Ant из каталога, в котором содержится build.xml, каталоги будут найдены. В противном случае, когда муравей выполняется через эту строку, результат неверен.

ant -buildfile D:\Projects\antproj searchDirectories 

Я не могу понять, в чем проблема?

+0

Как насчет ['Runtime # exec (String)'] (https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec-java.lang.String-)? Вы можете выполнить ту же команду, которую используете в своей оболочке. – beatngu13

+0

beatngu13, он все равно не работает –

ответ

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> содержит ошибку.

Смежные вопросы