Come si fa a caricare dinamicamente jar esterni?
Mi spiego meglio: ho la mia applicazione ed un jar esterno, voglio poterlo utlilizzare senza
.che questo sia nel classpath
.lanciare l'applicazione con java -cp vattelapesca.jar
E' possibile?
Come si fa a caricare dinamicamente jar esterni?
Mi spiego meglio: ho la mia applicazione ed un jar esterno, voglio poterlo utlilizzare senza
.che questo sia nel classpath
.lanciare l'applicazione con java -cp vattelapesca.jar
E' possibile?
Non ho capito bene la tua richiesta: a te interessa poter utilizzare le classi contenute nel JAR all'interno della tua applicazione o poter avviare l'applicazione contenuta nel JAR dalla tua applicazione?
Se il tuo problema è il primo (utilizzare delle classi contenute in un JAR, senza inserire questo JAR nel classpath) la soluzione è semplice: puoi, semplicemente, scompattare il JAR all'interno della cartella della tua applicazione e poi puoi usare l'import tranquillamente.
Se il tuo problema è il secondo, è sufficiente avviare l'applicazione utilizzando il classico Runtime:
Dove al posto della stringa "nomedeljar.jar" devi inserire il nome del JAR.codice:String [] rigaComando = {"java","-jar","nomedeljar.jar"}; Runtime.getRuntime().exec(rigaComando);
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
nono
mi sono spiegato male mi sa
Io ho la mia applicazione "mia.jar" in c:\app\.
Durante la sua esecuzione, ad un certo punto potrei aver bisogno di utilizzare delle classi che sono contenute in un jar esterno, "est.jar", in c:\app\lib\.
Il problema è che la jvm le classi di quel jar non le vede a meno che non siano incluse nelle librerie java o mia.jar non sia stata lanciata con java -cp est.jar mia.jar
Praticamente dovrei includere a tempo di esecuzione quel jar nel classpath conoscendo il suo path assoulto, per poterne utilizzare alcune classi.
Allora rientra nella tipologia che io ti ho messo in evidenza nel primo punto: scompatta il JAR all'interno di C:\app (verrà creata una struttura di directory, pari pari a quella del jar) così non hai nessun problema e puoi utilizzare tutte le classi di quel JAR in modo assolutamente normale, facendone l'import in modo usuale.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Hai provato ad inserire il Class-Path nel Manifest.mf del tuo jar?
Se vuoi trovare l'arcobaleno, devi sopportare la pioggia
Un'altra soluzione è copiare il file jar dentro la cartella JAVA_HOME/jre/lib/ext, dove JAVA_HOME rappresenta la cartella dove hai installato java
![]()
scusa lele hai ragione, avevo letto male il tuo primo reply
comunque
per quanto riguarda la tua soluzione, ci avevo pensato ma vorrei evitarla: in effetti ho gia alcune applicazioni (non scritte da me, evidentemente) che funzionano in un altro modo e vorrei capire come: c'e' un jar dell'applicazione, eseguibile, ed in una cartella lib un altro jar, non scompattato, che contiene appunto la libreria esterna utilizzata dall'applicazione principale.
Per quanto riguarda il reply di angelo, l'applicazione di cui ho appena parlato non ha alcuna info sul classpath nel manifest, per cui la soluzione che cerco non è nemmeno questa
per quanto riguarda fox, non voglio includere il jar nelle lib di java perche la mia applicazione deve essere ridistribuita e deve essere un pacchetto a se stante che deve provvedere autonomamente a tutti i moduli che le occorrono.
Altre idee?
Non vorrei dire una fesseria, ma credo che sia possibile anche includere il JAR (senza scompattarlo) all'interno della propria applicazione e farne uso, come se si trattasse di una directory effettivamente scompattata... non sono sicuro, però, di questa affermazione. Bisognerebbe effettuare delle prove.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Ciao a tutti; non so se sia possibile quanto detto da LeleFT; infatti spesso dovevo utilizzare dei file .jar e ho sempre considerato una cosa nel Manifest.mf del tipo:
Però è probabile che chi abbia scritto quelle classi abbia in qualche modo cercato di reperire i .jar (e quindi i .class al suo interno) scrvindo un metodo a mano che utilizzando il ClassLoader amdasse alla ricerca delle classi.codice:Class-Path: lib/xxxxx.jar lib/yyyy.jar
Se vuoi trovare l'arcobaleno, devi sopportare la pioggia
angelo questo metodo che dici tu funziona?