Вызвать муравья из Java, а затем вернуться в Java после завершения муравья - PullRequest
3 голосов
/ 03 января 2012

до сих пор я вызвал муравей скрипт из Java. Теперь возникает вопрос, возможно ли возобновить выполнение Java после завершения сборки муравья?

Как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 03 января 2012
Методы

org.apache.tools.ant.Main main() и startAnt() вызывают метод exit(), который, в свою очередь, вызывает System.exit(code).

Решение (при условии, что вы вызываете один из этих методов) заключается в-класс org.apache.tools.ant.Main и переопределить метод exit()

/**
 * This operation is expected to call {@link System#exit(int)}, which
 * is what the base version does.
 * However, it is possible to do something else.
 * @param exitCode code to exit with
 */
protected void exit(int exitCode) {
    System.exit(exitCode);
}
2 голосов
/ 03 января 2012

Проверьте источник основного класса Муравья, org.apache.tools.ant.Main.Вы можете попытаться вызвать его метод main или start напрямую или скопировать часть его логики в ваше приложение. После завершения этих методов ваше приложение должно продолжить выполнение.

РЕДАКТИРОВАТЬ:

Ответ Пола Кейджера правильныйЯ как-то упустил тот факт, что Ant Main вызывает System.exit().

Еще одна вещь, связанная с методами main / start / startAnt, заключается в том, что они ожидают аргументы как массив строк.Это может быть удобно, но не особенно безопасно и не ориентировано на объект.Чтобы вызвать Ant для данного файла сборки и цели, вы можете использовать что-то вроде этого:

public static void runAnt(String buildfile, String target) throws Exception {
    File buildFile = new File(buildfile);
    Exception error = null;
    org.apache.tools.ant.Project project = new org.apache.tools.ant.Project();
    try {
        project.addBuildListener(new org.apache.tools.ant.listener.Log4jListener());
        project.fireBuildStarted();
        project.init();
        project.setUserProperty(org.apache.tools.ant.MagicNames.ANT_FILE, buildFile.getAbsolutePath());
        org.apache.tools.ant.ProjectHelper.configureProject(project, buildFile);
        project.executeTarget(target);
    } catch (Exception e) {
        error = e;
        throw e;
    } finally {
        project.fireBuildFinished(error);
    }
}
1 голос
/ 03 января 2012
Process p = Runtme.getRuntime.exec("ant mytarget");
p.waitFor();  // waits until process completes before continuing to next line
// continue Java program here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...