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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top