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 .
Obrigado pela atenção.
Jovem,
Você terá o caminhos desses plugins definido em algum lugar da aplicação, por exemplo um arquivo .ini?
Se tiver o caminho fisicamente dos plugins utilizaria do comando abaixo?
[code]
public static void main(String[] args) {
try {
Process p = Runtime.getRuntime().exec(“c:\plugin\plugin.jar”);
}
catch(Exception e){ }
} [/code]
Abs,
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
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.
public static void main(String[] args) throws IOException, InterruptedException
{
//seta o comando a ser executado..
ProcessBuilder pb1 = new ProcessBuilder("java", "-jar", "Teste1.jar");
ProcessBuilder pb2 = new ProcessBuilder("java", "-jar", "Teste2.jar");
pb2.redirectErrorStream(true);
pb1.redirectErrorStream(true);
//aqui é setado no objeto a pasta que se encotra o .jar a ser executado
pb1.directory(new File("C:\Users\lucas\Desktop\testes"));
pb2.directory(new File("C:\Users\lucas\Desktop\testes"));
//simplesmente exibe o caminho que foi setado anteriormente
System.out.println("Directory: " + pb1.directory().getAbsolutePath());
System.out.println("Directory: " + pb2.directory().getAbsolutePath());
//inicia a execução dos pocessos vinculados aos .jar
Process p1 = pb1.start();
Process p2 = pb2.start();
//a partir daqui é somente teste para exibir a saida dos programas
InputStream is1 = p1.getInputStream();
InputStream is2 = p2.getInputStream();
BufferedReader br1 = new BufferedReader(new InputStreamReader(is1));
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
String line1 = br1.readLine();
String line2 = 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();’
abraço galera