Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [JAVA] caricamento dinamico jar

    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?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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:
    codice:
    String [] rigaComando = {"java","-jar","nomedeljar.jar"};
    Runtime.getRuntime().exec(rigaComando);
    Dove al posto della stringa "nomedeljar.jar" devi inserire il nome del JAR.


    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    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.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

  5. #5
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Hai provato ad inserire il Class-Path nel Manifest.mf del tuo jar?
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  6. #6
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    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

    Linux user number 403381

    Stop TCPA!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    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?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

  9. #9
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    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:

    codice:
    Class-Path: lib/xxxxx.jar lib/yyyy.jar
    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.
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    angelo questo metodo che dici tu funziona?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.