Java-эквивалент fork в Java-задаче Ant?
Вопрос
Муравьиная Java-задача обеспечивает fork
параметр, который, по определению "если включено, запускает выполнение класса в другой виртуальной машине".Поскольку мы имеем дело с большим объемом данных, установка этого параметра спасла нас от нехватки места в куче Java.
Мы хотим иметь возможность делать то же самое с помощью класса Java.Каков был бы наилучший способ достижения функциональности, предоставляемой fork
?
Решение
Запустите другой java-процесс.Например, используя класс ProcessBuilder.
http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html
Вы можете запускать столько рабочих процессов, сколько пожелаете.Сделайте так, чтобы у них был отдельный основной класс, они выполняли свои задачи из этого основного класса и завершали работу, когда их задача будет выполнена.
Вам придется выяснить их путь к классам и расположение java binary в системе, но это выполнимо.
Я думаю, вы даже можете получать уведомления о завершении через Process.waitFor().
Другие советы
Если вы посмотрите на ant
исходный код, когда fork
является true
, затем он просто оборачивает Execute
задача и, в конечном счете, код, который вызывается, является
Runtime.getRuntime().exec(cmd, env);
Загрузка и ознакомление с исходным кодом для org.apache.tools.ant.taskdefs.Java
и org.apache.tools.ant.taskdefs.Execute
даст вам несколько отличных советов по поиску местоположения исполняемого файла для запуска независимым от платформы способом и т.д.
Я думаю, вы можете напрямую использовать Ant API ... Ant можно напрямую использовать в классе Java.Javadoc доступен в их двоичном дистрибутиве.