これまでJavaからantスクリプトを呼び出しました。さて、問題は、アリのビルドの終了後にJavaの実行を再開することは可能ですか?Javaからantを呼び出し、ant終了後にjavaに戻ります。
どうすればよいですか?
これまでJavaからantスクリプトを呼び出しました。さて、問題は、アリのビルドの終了後にJavaの実行を再開することは可能ですか?Javaからantを呼び出し、ant終了後にjavaに戻ります。
どうすればよいですか?
Antのメインクラスのソースであるorg.apache.tools.ant.Main
を調べてください。 main
またはstart
メソッドを直接呼び出したり、そのロジックの一部をアプリケーションにコピーしたりすることができます。 これらのメソッドが終了したら、アプリケーションは実行を継続する必要があります。
EDIT:
The answer by Paul Cagerは正しいですが、私は何とかAntのMain
はSystem.exit()
を呼び出しているという事実を逃しました。
main
/start
/startAnt
メソッドの別のことは、引数が文字列の配列であると考えていることです。これは便利ですが、特にタイプセーフでもオブジェクト指向でもありません。
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);
}
}
Process p = Runtme.getRuntime.exec("ant mytarget");
p.waitFor(); // waits until process completes before continuing to next line
// continue Java program here
org.apache.tools.ant.Main
のmain()
とstartAnt()
方法順番にSystem.exit(code)
を呼び出すexit()
メソッドを呼び出します。与えられたビルドファイルとターゲットのためのAntを呼び出すには、このようなものを使用することができます。 (あなたがそれらのいずれかの方法を呼び出すと仮定)
ソリューションは、サブクラス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);
}
を上書きアリが行われたとき、あなたのJavaプログラムが終了していますか?それとも、続ける前に蟻が完了するのを待つか? –
Javaからantスクリプトを呼び出す*実際のコードを投稿してください。* – alf