Newsgroup: it.comp.java
Titolo: Innestare jar dentro un jar, soluzione migliore?

Ciao a tutti,
ecco il mio problema: rendere visibili delle librerie jar all'interno
di un nuovo file jar creato da me (i famigerati "jar innestati"...) Un
problema che ho cercato senza trovare soluzioni decenti, a parte
scompattare i .class delle librerie esterne all'interno delle cartelle
da cui creo il mio jar (soluzione poco elegante ed improponibile,
peraltro, visto che devo inserire moltissime librerie...)
La soluzione indicatami da un collega, ovvero specificare il seguente
manifest, non funziona:
Manifest-Version: 1.0
Main-Class: path.del.main.FileConMain
Class-Path: libs\concurrent.jar libs\gaussapi.jar ... libs\sqljdbc.jar
Mi accorgo che non va proprio questo, ovvero i file che ho inserito
nella cartella del progetto dacui estraggo il jar non sono visti
affatto (/libs è all'interno del progetto Eclipse con tutte le
librerie, quindi sono una sotto-cartella all'interno del jar). Ho
assoluta necessità di creare un jar per questioni di portabilità,
visto che poi devo "convertire" da jar in DLL - per chi non lo
sapesse, si fa mediante ikvm (
www.ikvm.net
).
Qualche suggerimento da darmi per un jar funzionante?
Altra domanda, Eclipse crea automaticamente nel jar un file .classpath
di cui non sono sicuro di aver capito l'utilità: esso presenta, in
forma tipo XML e tra l'altro, il path delle librerie che vengono
caricate nel "Java Build Path"... mi chiedo, questo file va tolto
perchè sto facendo io "a manina" il lavoro, giusto?? Altrimenti
l'utente finale dovrebbe avere i file caricati dall'esterno in quella
cartella, credo... insomma, vorrei compattare tutto nel jar per
evitare di avere i file sparsi nell'hd, questo è il punto.
Spero di essere stato chiaro: grazie, come sempre...!

 Qualche suggerimento da darmi per un jar funzionante?
La tua spiegazione mi e' incomprensibile, visto che parti con una cosa, 
passi ad un altra e poi sembri chiederne un'alta ancora.
Prima parli di jar innestati, allora sembra che tu vuoi un unico jar con 
tutte le dipendenze incorporate (per questo guardati il plugin FatJar di 
Eclipse).
Poi sembra che vuoi fare la cosa classica: il tuo jar e le dipendenze 
tenute estrenamente. Hai 2 possibilita':
-lanciare il jar definendo il classpath da linea di comando: java -cp 
jar1.jar;jar2.jar   -jar mio.jar
-usare il manifest. Se non va e' perche' hai sbagliato sintassi ovviamente.
Alla fine sembra che vuoi usare il MANIFEST per referenziare delle 
librerie che stanno dentro il jar (non ha alcun senso)...
Boh.


Ecco la risposta, unico jar con dipendenze incorporate mediante questo
celebre plugin
che sono il solo a non conoscere.
C'est la vie: uno cerca di essere chiaro e dare dettagli e trova
risposte da zitelle inacidite.
Moderiamo i toni, che diamine, neanche ci conosciamo,
si parla di macchine che fanno girare codice, manco si parlasse di
dio, di politica,
di sociale o delle nostre mamme. Mi sfugge il motivo di questa
risposta.
Bastava che ti fermassi 10 righe prima, senza fare finta di non
capire
giusto per fare un po' di sarcasmo gratuito (ed inutile).
Anche perchè mi hai dato le possibili risposte, quindi perchè mai dici
che non sono chiaro?
boh "al quadrato", direi. Grazie.

cicap ha scritto:

Grazie per avermi puntato verso fatjar che non conoscevo e che può 
rivelarsi una soluzione per alcuni problemi (specialmente in rapporto 
alle SWT) :)