Executar vários arquivos .JAR exsistentes em uma pasta utilizando código java [Resolvido]
3 respostas
lucas_vieira
Olá pessoal, estou precisando de ajuda.
O problema é o seguinte, tenho alguns arquivos .jar que serão plugins para uma aplicação principal,
esses arquivos devem ser executados no momento que a aplicação principal for iniciada. Até poderia utilizar algum shell scrip,
porém os plugins são adicionados (como em qualquer outra aplicação que utiliza plugins) e preciso executar de forma dinâmica os .jar .
Então, assim que o plugin é “instalado” na aplicação é salvo seu caminho do arquivo .jar na minha base de dados.
Utilizando esse método para criar um novo processo vinculado a execução do plugin eu já conhecia, e na verdade é necessário
executar o comando ‘java -jar’, porém ele não funciona perfeitamente em todos os casos, em alguns casos chega até a perder
referencia de arquivos e bibliotecas … pensei em algo como vincular um objeto ao plugin (arquivo .jar) para ai sim executalo, seria perfeito, será que tem algo do tipo? Ou viajei ?
Uma outra opção seria uma automatização de execução desses asquivos .jar … alguém conhece alguma solução ?
Abraço galera, e valeu pela atenção
lucas_vieira
Pessoal, muito obrigado pela atenção.
Consegui encontrar em um fórum da gringa a solução para o meu problema, e o mais legal, de uma forma mais clear que usando o Runtime.exec().
Segue o código pra quem tiver a mesma dúvida.
publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{//seta o comando a ser executado..ProcessBuilderpb1=newProcessBuilder("java","-jar","Teste1.jar");ProcessBuilderpb2=newProcessBuilder("java","-jar","Teste2.jar");pb2.redirectErrorStream(true);pb1.redirectErrorStream(true);//aqui é setado no objeto a pasta que se encotra o .jar a ser executadopb1.directory(newFile("C:\Users\lucas\Desktop\testes"));pb2.directory(newFile("C:\Users\lucas\Desktop\testes"));//simplesmente exibe o caminho que foi setado anteriormenteSystem.out.println("Directory: "+pb1.directory().getAbsolutePath());System.out.println("Directory: "+pb2.directory().getAbsolutePath());//inicia a execução dos pocessos vinculados aos .jarProcessp1=pb1.start();Processp2=pb2.start();//a partir daqui é somente teste para exibir a saida dos programasInputStreamis1=p1.getInputStream();InputStreamis2=p2.getInputStream();BufferedReaderbr1=newBufferedReader(newInputStreamReader(is1));BufferedReaderbr2=newBufferedReader(newInputStreamReader(is2));Stringline1=br1.readLine();Stringline2=br2.readLine();while(line1!=null&&line2!=null){line1=br1.readLine();line2=br2.readLine();System.out.println(line1);System.out.println(line2);}}
Só fique atento pois os processos continuam execuntando, então ao fim da aplicação os mesmos devem ser finalizados, por exemplo com o comando ‘p1.destroy();’