Ant Java タスクはfork
パラメーターを提供します。これは、定義により、「有効にすると、別の VM でクラスの実行をトリガーします」。大量のデータを扱っているため、このパラメーターを設定することで、Java ヒープ スペースが不足することを回避できました。
Java クラスを介して同じことができるようにしたいと考えています。が提供する機能を実現する最善の方法は何fork
ですか?
3 に答える
別の Java プロセスを実行します。たとえば、 ProcessBuilder クラスを使用します。
http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html
必要な数のワーカー プロセスを実行できます。別のメイン クラスを持ち、そのメイン クラスからタスクを実行し、タスクが完了したら終了するようにします。
それらのクラスパスと、システム上の Java バイナリの場所を把握する必要がありますが、それは可能です。
Process.waitFor() を介して完了したときに通知を受けることもできると思います。
ant
ソースコードを見ると、fork
istrue
の場合、タスクをラップするだけでExecute
、最終的に呼び出されるコードは
Runtime.getRuntime().exec(cmd, env);
および のソース コードをダウンロードして確認するorg.apache.tools.ant.taskdefs.Java
とorg.apache.tools.ant.taskdefs.Execute
、プラットフォームに依存しない方法で実行する実行可能ファイルの場所を見つけるための優れたヒントが得られます。
Ant API を直接使用できると思います...Ant は Java クラスで直接使用できます。Javadoc はバイナリ配布で入手できます。