2012-01-03 14 views
3

これまでJavaからantスクリプトを呼び出しました。さて、問題は、アリのビルドの終了後にJavaの実行を再開することは可能ですか?Javaからantを呼び出し、ant終了後にjavaに戻ります。

どうすればよいですか?

+1

を上書きアリが行われたとき、あなたのJavaプログラムが終了していますか?それとも、続ける前に蟻が完了するのを待つか? –

+1

Javaからantスクリプトを呼び出す*実際のコードを投稿してください。* – alf

答えて

2

Antのメインクラスのソースであるorg.apache.tools.ant.Mainを調べてください。 mainまたはstartメソッドを直接呼び出したり、そのロジックの一部をアプリケーションにコピーしたりすることができます。 これらのメソッドが終了したら、アプリケーションは実行を継続する必要があります。

EDIT:

The answer by Paul Cagerは正しいですが、私は何とかAntのMainSystem.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); 
    } 
} 
1
Process p = Runtme.getRuntime.exec("ant mytarget"); 
p.waitFor(); // waits until process completes before continuing to next line 
// continue Java program here 
3

org.apache.tools.ant.Mainmain()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); 
} 
関連する問題