Esportare jar con librerie esterne

di il
7 risposte

Esportare jar con librerie esterne

Buonasera a tutti,
utilizzo Eclipse e sto incontrando delle difficoltà ad esportare il mio progetto in un jar file eseguibile.
Il progetto utilizza numerose librerie esterne e penso sia questo il problema: non riesco ad esportarle con il progetto.
Penso di averle provate tutte. Da Progetto->Export->Java->Runnable JAR File, ho provato tutte le 3 opzioni di "Library handling" ma la situazione non muta minimamente.
Una volta esportato, il jar parte ma si blocca quasi subito, al momento in cui effettua una richiesta http utilizzando appunto una di quelle librerie.

Sapreste dirmi come risolvere questo problema?

Grazie in anticipo a chiunque vorrà aiutarmi

7 Risposte

  • Re: Esportare jar con librerie esterne

    Enrichetto ha scritto:


    utilizzo Eclipse e sto incontrando delle difficoltà ad esportare il mio progetto in un jar file eseguibile.
    Il progetto utilizza numerose librerie esterne e penso sia questo il problema: non riesco ad esportarle con il progetto.
    Quando si ha un progetto già un minimo complesso e che sfrutta diverse librerie esterne, te lo dico sinceramente, in teoria sarebbe meglio usare uno strumento di build: Apache Ant o meglio Apache Maven o Gradle o altro.

    In generale, se usi un tipo di progetto "nativo" del IDE (con il suo processo di build) non è detto che sia facile/possibile fare quello che chiedi. E se anche è fattibile, non è detto che sia facilmente e velocemente ripetibile.

    A parte questo, dovresti precisare meglio una cosa: DOVE sono tali librerie jar e COME le hai referenziate nel progetto. Non sto parlando della "esportazione" ma di una fase ancora molto prima, quando hai sviluppato il progetto ed hai dovuto sicuramente "tirar dentro" i jar nel progetto. Ecco: dove sono e come li hai referenziati.
  • Re: Esportare jar con librerie esterne

    andbin ha scritto:


    Enrichetto ha scritto:


    utilizzo Eclipse e sto incontrando delle difficoltà ad esportare il mio progetto in un jar file eseguibile.
    Il progetto utilizza numerose librerie esterne e penso sia questo il problema: non riesco ad esportarle con il progetto.
    Quando si ha un progetto già un minimo complesso e che sfrutta diverse librerie esterne, te lo dico sinceramente, in teoria sarebbe meglio usare uno strumento di build: Apache Ant o meglio Apache Maven o Gradle o altro.

    In generale, se usi un tipo di progetto "nativo" del IDE (con il suo processo di build) non è detto che sia facile/possibile fare quello che chiedi. E se anche è fattibile, non è detto che sia facilmente e velocemente ripetibile.

    A parte questo, dovresti precisare meglio una cosa: DOVE sono tali librerie jar e COME le hai referenziate nel progetto. Non sto parlando della "esportazione" ma di una fase ancora molto prima, quando hai sviluppato il progetto ed hai dovuto sicuramente "tirar dentro" i jar nel progetto. Ecco: dove sono e come li hai referenziati.
    Innanzitutto grazie per la risposta.
    Per quanto riguarda le librerie le ho inserite nel "Java Build Path" (dalle proprietà del progetto).
  • Re: Esportare jar con librerie esterne

    Enrichetto ha scritto:


    Per quanto riguarda le librerie le ho inserite nel "Java Build Path" (dalle proprietà del progetto).
    Sì ma come.
  • Re: Esportare jar con librerie esterne

    Prima ho scaricato le librerie e poi le ho importate mediante:
    Progetto->Proprietà->Java Build Path->Add external JARs
    [Le librerie posso quindi vederle nelle cartelle del progetto "JRE System Library", "Referenced Libraries" e "Maven Dependencies"]

    Grazie ancora!
  • Re: Esportare jar con librerie esterne

    Enrichetto ha scritto:


    Prima ho scaricato le librerie e poi le ho importate mediante:
    Progetto->Proprietà->Java Build Path->Add external JARs
    Riguardo il "Add external JARs" c'è una questione che non riguarda la creazione del jar ma la "portabilità" del tuo progetto. Con quel pulsante, Eclipse "tira dentro" nel progetto un percorso "assoluto", che quindi vale solo per la tua macchina. Se zippi il progetto e lo dai a qualcuno, avrà problemi e dovrà rifarsi tutto l'iter di settaggio del build path.

    L'ideale è quello di fare una cartella "lib" o "libs" o altro (il nome non è molto rilevante) sotto il progetto, quindi metterci i jar e poi usare il pulsante "Add JARs" (NON il "Add external JARs"). Questo fa sì che il percorso tirato dentro il progetto sia "relativo" (al progetto stesso).

    Detto questo, che tu lo faccia con l'uno o l'altro pulsante, quando poi fai l'export del runnable jar, se usi la terza opzione per il library handling, se ben ricordo Eclipse mette il jar principale dove gli dici e poi lì in quella directory mettere una cartella nomejar-lib (o nomejar_lib, non ricordo) in cui inserisce tutti i jar.
    E il jar principale dovrebbe avere l'attributo Class-Path correttamente specificato all'interno del "manifest".

    Verifica perché mi sembrerebbe strano se non ti ha fatto questo.

    Enrichetto ha scritto:


    Le librerie posso quindi vederle nelle cartelle del progetto "JRE System Library", "Referenced Libraries" e "Maven Dependencies"
    Queste non sono cartelle "fisiche" ..... e comunque "Maven Dependencies", cioè il tuo progetto è basato su Maven?? E perché allora non sfrutti Maven? Le librerie che stai usando non si trovano su un repo Maven??
  • Re: Esportare jar con librerie esterne

    Ho provato a creare una cartella lib per inserire le librerie all'interno del progetto e quindi utilizzare "Add JARs" ma in tal modo nemmeno parte il programma.
    Ho provato anche ad usare la terza impostazione (quella in cui crea una cartella con le librerie) ma arrivato ad un certo punto il programma si blocca al solito.

    Nonostante ciò sono riuscito a capire qual è il problema: utilizzo la libreria Sigar che avevo implementato per delle funzioni inutili, giusto per capire come funzionava..me ne ero anche dimenticato...bene, questa libreria è la causa di tutti i problemi. Se disattivo tutte le istruzioni legate ad essa tutto funziona.
    Tutto risolto quindi. Però mi piacerebbe capire perché allora non funzionava. Sapresti intuirne il motivo?

    Grazie mille comunque per l'aiuto
  • Re: Esportare jar con librerie esterne

    Enrichetto ha scritto:


    Ho provato a creare una cartella lib per inserire le librerie all'interno del progetto e quindi utilizzare "Add JARs" ma in tal modo nemmeno parte il programma.
    Ho provato anche ad usare la terza impostazione (quella in cui crea una cartella con le librerie) ma arrivato ad un certo punto il programma si blocca al solito.
    Bah ... non so ovviamente di preciso i vari passi che hai fatto ma a parte la Sigar (vedi sotto), non dovrebbero esserci problemi.

    Enrichetto ha scritto:


    utilizzo la libreria Sigar
    La Sigar fa uso di JNI per invocare funzioni "native" e quindi viene fornita con delle librerie dinamiche per i vari S.O. La "dll" per il S.O. in uso va chiaramente resa rintracciabile dalla JVM, altrimenti ovviamente non funziona un tubo.
Devi accedere o registrarti per scrivere nel forum
7 risposte