equivalente Java da bifurcação na tarefa Java de Ant?
Pergunta
Ant tarefa Java fornece parâmetro fork
, que, por definição "se disparadores habilitados a execução classe em outra VM" . Como estamos lidando com uma grande quantidade de dados, definindo este parâmetro nos salvou de ficar sem espaço Java heap.
Queremos ser capazes de fazer o mesmo através de uma classe Java. Qual seria a melhor maneira de obter a funcionalidade, tal como previsto pela fork
?
Solução
Ao executar outro processo de java. Usando classe ProcessBuilder, por exemplo.
http://java.sun.com/ JavaSE / 6 / docs / api / java / lang / ProcessBuilder.html
Você pode executar o maior número de processos de trabalho como quiser. Fazê-los ter uma classe separada principal, fazendo suas tarefas a partir dessa classe principal, e quiting quando a tarefa estiver concluída.
Você vai ter que descobrir o seu caminho de classe, e a localização do binário java no sistema, mas isso é factível.
Eu acho que você pode até mesmo ser notificado quando eles completam via Process.waitFor ().
Outras dicas
Se você olhar para o código-fonte ant
, quando fork
é true
, então ele só envolve uma tarefa Execute
e, eventualmente, o código que é chamado é
Runtime.getRuntime().exec(cmd, env);
Download e ter um olhar para o código-fonte para org.apache.tools.ant.taskdefs.Java
e org.apache.tools.ant.taskdefs.Execute
vai lhe dar algumas grandes ponteiros em encontrar a localização do executável para ser executado de uma forma independente de plataforma, etc.
Eu acho que você pode usar diretamente a API Ant ... Ant pode ser usado diretamente em uma classe Java. O Javadoc está disponível em sua distribuição binário.