@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

javaからantを呼び出す

1
投稿者投稿内容
なっかむ
常連さん
会議室デビュー日: 2002/12/26
投稿数: 29
投稿日時: 2004-11-27 23:15
javaアプリケーションからorg.apache.tools.ant.Main#startAnt
を呼び出して、build.xmlをビルドするプログラムを書いていますが、
startAntの内部でSystem.exit(0);しているため、
javaアプリケーションも一緒に終了してしまいます。

ビルドした後も、アプリケーションの処理を続けたいのですが、
何か方法がないでしょうか?

[環境]
java 2 sdk 1.4.2_05
ant 1.6.2
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-28 11:39
startAntをどうやって使ってるんですか? Mainのサブクラスを作ってるとか?
普通にmainメソッドを使うのではだめなんですか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-28 13:46
セキュリティポリシーでAntのパッケージに System.exit() の呼び出しを禁止させる、とか Runtime.exec で別プロセスとして fork する、のどちらかでしょうか。
なっかむ
常連さん
会議室デビュー日: 2002/12/26
投稿数: 29
投稿日時: 2004-11-28 16:19
こんな感じで実装しています。


Main ant = new Main();
ant.startAnt(
new String[] {"-f", file},
properties,
getClass().getClassLoader());
なっかむ
常連さん
会議室デビュー日: 2002/12/26
投稿数: 29
投稿日時: 2004-11-28 16:23
「セキュリティポリシーでAntのパッケージに System.exit() の呼び出しを禁止させる」
これって、具体的にどのクラスを用いて行うのでしょうか?

でも、あまりスマートなやり方で無い気がします。
antのクラスで、同じことをする別の方法って無いのでしょうか?
kit
会議室デビュー日: 2003/02/05
投稿数: 2
投稿日時: 2004-11-29 17:13
つい最近、同じ事で悩みましたがこんな感じで出来ました。
ant.jarとant-launcher.jarをクラスパスに通して
コマンドライン引数でビルドファイルを指定してください。


import org.apache.tools.ant.BuildLogger;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;


public class AntTest {

public static void main(String[] args) {

System.out.println("START");

Project project = new Project();
project.init();

// ビルドファイルを指定
ProjectHelper.getProjectHelper().parse(project, new java.io.File(args[0]));

BuildLogger logger = new DefaultLogger();
logger.setMessageOutputLevel(Project.MSG_INFO);
logger.setOutputPrintStream(new java.io.PrintStream(System.out));
logger.setErrorPrintStream(new java.io.PrintStream(System.err));
logger.setEmacsMode(false);

project.addBuildListener(logger);

java.util.Vector list = new java.util.Vector();

/*
* ターゲットを指定
* list.add("compile");
* のようにすれば任意のターゲットを指定できます。
*/
list.add(project.getDefaultTarget());
project.executeTargets(new java.util.Vector(list));

System.out.println("DONE");

}
}

antによってSystem.exit()されなければ、最後に"DONE"が出力されるはずです。
参考になりましたでしょうか。

なっかむ
常連さん
会議室デビュー日: 2002/12/26
投稿数: 29
投稿日時: 2004-11-29 20:56
> antによってSystem.exit()されなければ、最後に"DONE"が出力されるはずです。
> 参考になりましたでしょうか。

大変参考になりました。
まさに、これがやりたかったのです。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)