PDA

View Full Version : Java - eseguire file jar da codice


gabmac2
03-10-2015, 16:39
Dopo la creazione di un "runnable jar" con Eclipse, l' esecuzione da terminale (da Ubuntu), avviene senza problemi
E' possibile richiamare quel file jar dal codice di una programma Java?
Grazie in anticipo

gabmac2
04-10-2015, 20:45
nessuno?

Daniels118
05-10-2015, 08:57
Certo che puoi, ed esistono almeno 2 strade:
1) demandi al sistema operativo l'esecuzione di un'altra jvm passandole il file jar come parametro;
2) metti il jar nel classpath e richiami direttamente la classe che contiene il main.

gabmac2
05-10-2015, 14:15
esempi di codice?

Daniels118
05-10-2015, 15:54
Per la prima strada puoi cercare uno dei tanti esempi in rete, eccone uno:
http://www.rgagnon.com/javadetails/java-0014.html

Per la seconda basta scrivere:
ClasseCheContieneIlMain.main("arg1", "arg2", ...);
Naturalmente il jar deve stare nel classpath, quindi il programma va lanciato così:
java -cp "Package1.jar;Package2.jar" MiaClasse

P.S. il secondo metodo può dare problemi se il programma chiamato esegue System.exit, e qui ci sarebbe da fare un discorso a parte, valuta tu che strada scegliere.

gabmac2
07-10-2015, 15:52
risolto con Runtime.getRuntime().exec
si può passare al jar una stringa?

Daniels118
07-10-2015, 17:05
Certamente, la sintassi base è questa:
java -jar file.jar argomenti

E' ovvio che il main deve prevedere degli argomenti, altrimenti questi vengono semplicemente ignorati.

gabmac2
07-10-2015, 17:26
Quindi
String str="x";
java -jar file.jar str
void main(String[] args)
andrebbe bene?

Daniels118
08-10-2015, 07:33
Che il main vada dichiarato in quel modo è fuori discussione.
Quando dicevo che il main deve prevedere degli argomenti, mi riferivo al main del programma chiamato.

Partendo dal presupposto che tu stia richiamando il jar attraverso il metodo exec, il comando deve essere costruito in questo modo:
exec("java -jar file.jar " + str)
oppure
exec("java -jar file.jar x")
Meglio ancora se usi l'overload che prevede un array con gli argomenti, così ti togli il disturbo di dover fare l'escape di eventuali caratteri speciali:
exec(new String[] {"java", "-jar", "file.jar", str})
o direttamente
exec(new String[] {"java", "-jar", "file.jar", "x"})

Se invece ti riferisci al jar che chiami da riga di comando devi fase così:
java -jar file.jar x
se vuoi usare una variabile per specificare l'argomento devi utilizzare la sintassi appropriata in base al sistema operativo, per esempio su windows:
set str=x
java -jar file.jar %str%
su linux:
str='x'
java -jar file.jar $str