PDA

View Full Version : [Java] richiamare classi specifiche dal jar


DeltaDirac
20-09-2011, 22:00
Come posso creare un package jar (o zip) che contenga delle classi richiamabili da linea di comando?

Esempio: voglio creare l'archivio calcola.zip che contenga almeno due classi somma.class e sottrai.class.

Vorrei poter usare l'archivio con una chiamata del tipo:

java -cp calcola.zip somma 2 3
piuttosto che:
java -cp calcola.zip sottrai 10 5

e vedere il risultato (chissà perchè mi aspetto 5 e 5)

Ovviamente le due classi hanno entrambe un metodo main()

Con Netbeans riesco ad impostare solo una classe main attiva, e quindi il jar file generato contiene o l'una o l'altra classe eseguibile, mentre da linea di comando non riesco a far nulla di buono.

:confused:

Floris
21-09-2011, 00:27
Non puoi recuperare gli argomenti della linea di comando dall'array String[] args passato alla funzione main?
Troveresti in prima posizione "somma" o "differenza" da cui puoi decidere cosa fare. Ti crei una classe che utilizza le altre due, somma e sottrazione.

DeltaDirac
21-09-2011, 06:33
Non puoi recuperare gli argomenti della linea di comando dall'array String[] args passato alla funzione main?
Troveresti in prima posizione "somma" o "differenza" da cui puoi decidere cosa fare. Ti crei una classe che utilizza le altre due, somma e sottrazione.

Ciao Floris,

in realtà si: potrei fare come dici.

Però ho alcuni eseguibili che funzionano esattamente come detto: si lancia il bytecode con java -cp dal quale si evoca la classe voluta e quindi gli argomenti, e mi sono chiesto come sia realizzabile tutto ciò.

Vorrei capire meglio i meccanismi di gestione delle classi con metodi main() multipli nello stesso package.
Son di coccio, lo so :D

banryu79
21-09-2011, 08:19
Però ho alcuni eseguibili che funzionano esattamente come detto: si lancia il bytecode con java -cp dal quale si evoca la classe voluta e quindi gli argomenti, e mi sono chiesto come sia realizzabile tutto ciò.

Scusa, puoi postare due o tre esempi di queste invocazioni da riga di comando?

DeltaDirac
21-09-2011, 09:04
Scusa, puoi postare due o tre esempi di queste invocazioni da riga di comando?

Sono esattamente quelli riportati nel primo messaggio:

java -cp calcola.zip somma 2 3
piuttosto che:
java -cp calcola.zip sottrai 10 5

I sorgenti hanno ognuno un metodo main() in modo da renderli eseguibili

DeltaDirac
21-09-2011, 09:51
Era più semplice di quel che immaginassi:

1) si compilano i sorgenti delle classi ognuna col proprio metodo main():
javac classe_1.java classe_2.java... classe_n.java
2) si crea il file jar con:

jar -cf pack.jar classe_1.class classe_2.class... classe_n.class

3) si evocano le classi dal jar per nome usando l'opzione -cp :
java -cp pack.jar classe_1 <parametri classe_1>
java -cp pack.jar classe_2 <parametri classe_2>

Ma funziona solo con classi "allo stesso livello" e che non appartengono ad altri packages.

That's all. Good for newbie as me :muro: