Есть ли руководство по запуску Ant из Java? Я получил некоторый код отсюда: Настройка JAVA_HOME при запуске Ant из Java
Но не смогли заставить его работать. Я пытался найти пример или учебник о том, как на самом деле его использовать.
Вот что у меня есть:
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.fireBuildStarted();
p.init();
p.executeTarget("default");
Но я думаю, эта ошибка:
Exception in thread "main" Target "default" does not exist in the project "null".
at org.apache.tools.ant.Project.tsort(Project.java:1912)
at org.apache.tools.ant.Project.topoSort(Project.java:1820)
at org.apache.tools.ant.Project.topoSort(Project.java:1783)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at com.arthrocare.vss2svn.VSS2SVN.newProcess(VSS2SVN.java:128)
at com.arthrocare.vss2svn.VSS2SVN.main(VSS2SVN.java:52)
Java Result: 1
Я попытался указать проект с помощью:
p.setUserProperty("ant.project.name", "VSS Project");
Но не повезло.
Указанный файл ant является правильным, поскольку он отлично работает из командной строки.
UPDATE
После еще нескольких поисков я попал сюда: http://onjava.com/pub/a/onjava/2002/07/24/antauto.html?page=1
Это отличный учебник.
Вот код, который я получил немного раньше, чем увидел код в ответе ниже:
Project project = new Project();
ProjectHelper.configureProject(project, buildFile);
DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
project.addBuildListener(consoleLogger);
project.init();
project.executeTarget(project.getDefaultTarget());
Но по какой-то причине задача все равно не выполняется! Я использую задачу Visual Source Safe, которая должна прочитать значение среды во время выполнения, но не видит ее при таком подходе. Запуск файла build.xml вручную с использованием следующего кода:
ProcessBuilder pb = new ProcessBuilder();
Map env = pb.environment();
String path = env.get("ANT_HOME");
System.out.println(path);
pb.directory(new File(System.getProperty("user.home")));
pb.command(path + System.getProperty("file.separator")
+ "bin" + System.getProperty("file.separator") + "ant.bat");
try {
Process p = pb.start();
} catch (IOException ex) {
//
}