Newsgroup: it.comp.java
Titolo: Tutoria jar

Dove posso trovare dei tutorial per gestire e creare i file jar eseguibili?
Grazie!
--
Marco "DUFF" Palermo
MarcoNO...@Hotmail.com
http://www.marcoduff.cjb.net/

 jar eseguibili?
Nella documentazione di Java c'e' un "minitutorial" per Jar.
Davide

Dove posso trovare dei tutorial per gestire e creare i file jar eseguibili?
Chiaramente nel Tutorial della Sun (questo sconosciuto...), ed in
particolare
http://java.sun.com/docs/books/tutorial/jar/index.html
Ma cosa intendi per "jar eseguibili"?
-- 
Ciao
	Fabrizio C.

> Nella documentazione di Java c'e' un "minitutorial" per Jar.
Troppo scarno...
Ciao!


 Ma cosa intendi per "jar eseguibili"?
In effetti non è il termine più esatto. Intendo, spiegandolo in maniera
"terra-terra", ci clicchi su e lui si esegue!
Ciao!


"terra-terra", ci clicchi su e lui si esegue!
L'unica cosa che _devi_ fare "sui jar" per ottenere ciò è indicare nel
manifest qual è la main class (e questo c'è sul Tutorial), il resto va
fatto sull'ambiente.
Per quello che so, funziona in Win e in Solaris: per i dettagli puoi
vedere 
http://java.sun.com/j2se/1.3.0/docs/guide/jar/jarGuide.html
 in
basso.
HTH
-- 
Ciao
	Fabrizio C.

 tue esigenze e in cosa il Tutorial non ti soddisfa?
Ok, ho questa esigenza:
Ho un programma formato da più file class, supponiamo A.class, B.class e
C.class.
La classe A è quella principale (dove è contenuto il main) le altre sono
soltanto di supporto.
La mia esigenza è quella di fare un file jar della sola classe A, e
mantenere i file B e C come file class.
In poche parole voglio fare questo:
A.jar, B.class e C.class
Il problema sta nel fatto che quando faccio partire il file A.jar (con il
doppio click da Esplora risorse di windows) mi da errori tipo classe B o C
non trovate.
In effetti le classi B e C non sono nel file jar, ma io le voglio tenere
esterne.
Si può fare?


Si può fare?
nel manifest puoi indicare il classpath
Main-Class: A
Class-Path: pathclassi (penso accetti anche il .)
ciao_O
_______________________________________
jame 4.0 is available! 
http://jame.sourceforge.net
_______________________________________
http://digilander.iol.it/schiele

 Si può fare?
scusa la risposta banale, ma non basta inserire nel CLASSPATH di sistema
la cartella che contiene B.class e C.class?
-- 
Ciao,  |     Gott weiss ich will kein Engel sein
Matteo |                     -- Rammstein, Engel

 la cartella che contiene B.class e C.class?
Già fatto: SET CLASSPATH=.;
Ovvero controlla nella directory in cui parte il Main file, ma non succede
nulla!


Class-Path: pathclassi (penso accetti anche il .)
Nel Tutorial, riferito alla riga che dici tu, scrive: "Download
extensions are JAR files that are referenced by the manifest files of
other JAR files.". Ho provato e, purtroppo per MarcoDuff, funziona
veramente solo con i jar.


Si può fare?
Quasi. Ho fatto qualche prova e non sono riuscito a farlo funzionare,
però...
Se i tuoi requisiti si possono modificare un pochino, si potrebbe fare
(seguo l'esempio) A.jar, B.jar, C.jar. A questo punto, nel manifest di
A.jar scrivi
Main-Class: A
Class-Path: B.jar C.jar
e tutto funziona (o almeno dovrebbe).




in effetti io l'ho sempre usato con i jar :)


 Class-Path: pathclassi (penso accetti anche il .)
GRRRR!
Ora ho un altro casino: ho fatto il file jar (zippando tutto e rinominando
il file zip in jar).
Inserisco nel file zip la cartella meta-inf con un file Manifest.mf di
questo tipo:
Manifest-Version: 1.0
Main-Class: Source
Created-By: 1.3.0_02 (Sun Microsystems Inc.)
Dove Source è la classe che contiene la funzione main.
Se faccio partire il tutto con il comando java -jar Source.jar funziona
tutto.
Ma se provo a cliccare due volte sul file non succede nulla! Ma invece
dovrebbe partire in automatico!
Dove sbaglio?


 Dove sbaglio?
secondo me a creare i .jar a mano anziche` utilizzare i tool appositi:
nel jar c'e' altro oltre all'indicazione sulla Main-Class (CRC ad
esempio), e questi dati e` molto piu` semplice farli generare in
automatico:
 jar  cvfm  archivio.jar  manifesto  Programma.class
crea il file archivio.jar inserendovi la classe "Programma.class" e
generando un *nuovo* MANIFEST.MF a partire dai dati presenti nel file
"manifesto" passato da riga di comando.
Il contenuto del file "manifesto" puo` essere ad esempio la semplice
indicazione della Main-Class.
Sicuramente queste cose gia` le sai, ma nel dubbio...


 automatico:
Hai ragione, ma se non mi preoccupo della sicurezza i file jar sono uguali
ai file zip ed il file Manifest contiene soltanto informazioni su chi lo ha
creato e quale è la classe con il main. Comunque ho provato senza risultato.


> e tutto funziona (o almeno dovrebbe).
La seconda che hai detto!
Giuro che non ci sto capendo più nulla!
Ok, spiego passo passo.
Ho un programma di 52 file class, 2 di questi in una sottocartella Data, e
altri file di suoni e immagini.
Siccome i file sono molti e soprattutto odio la simbologia di java tipo
programma.class, programma$1.class ecc... fino a $6.class voglio fare dei
file jar in modo da compattare tutto. Non posso fare un unico file. Il
programma lo aggiorno 1 volta al mese e se faccio tutto in un unico file jar
devo rispedire tutto via e-mail impesantendo sia la mia posta sia quella dei
miei amici a cui arriva l'aggiornamento. Ho deciso di fare tre file del
programma (ad esempio A.jar, B.jar C.jar) li ho fatti in questo modo:
jar cvfm A.jar Manifest.mf Programma*.class  // Inserisco tutti i file tipo
Programma.class Programma$1.class ecc...
jar cvfm B.jar Manifest.mf Menu*.class // Inserisco i file tipo
MenuPrincipale.class MenuPannello.class ecc...
jar cvfm C.jar Manifest.mf *.class Data\*.class // Inserisco gli altri file
(dopo aver creato i file A.jar e B.jar ho cancellato i file già compattati)
Da notare che lascio fuori dall'archivio i file immagine e i suoni e un file
opzioni.ini.
Doppio click su A.jar... NULLA!
Vado da MS-DOS e scrivo javaw A.jar
Risultato: messaggio di errore che dice: Could not find the main class.
Program will exit!
Ok, ci sarà qualche cosa sbagliata nel Manifest.mf! Ma eccolo:
Manifest-Version: 1.0
Created-By: 1.3.0_02 (Sun Microsystems Inc.)
In effetti non c'è nulla sulla main class (anche se io nel Manifest.mf della
riga di comando jar lo avevo messo).
Comunque rinomino A.jar in A.zip ed inserisco nella cartella meta-inf questo
file Manifest.mf:
Manifest-Version: 1.0
Created-By: 1.3.0_02 (Sun Microsystems Inc.)
Main-Class: A.class
Class-Path: B.jar C.jar
Dove A.class è il file contenuto in A.jar che contiene la funzione main di
tutto il programma.
Risultato: Could not find the mai class. Program will exit!
A voi la parola!


Ciao!
prova a togliere .class
Main-Class: A


Dove sbaglio?
Non funziona solo con il tuo jar o con tutti?
Sei sicuro di avere la giusta associazione fra file .jar e comando da
eseguire?
Risolvi un problema per volta: prima fai le prove da riga di comando
java -jar A.jar
poi
javaw -jar A.jar
Se funziona così, e hai l'associazione giusta, funzionerà anche col
doppio click.
-- 
Ciao
	Fabrizio C.

Main-Class: A.class
             ^^^^^^^
Capisco che odi le estensioni che usa Java, ma...
Come in quasi tutti i contesti il ".class" non si mette!! Devi
indicare la _classe_ non il _file_!
Salvo ulteriori complicazioni, il file che indichi sulla riga di
comando (quello che tu hai chiamato Manifest.mf) deve contenere _solo_
le due righe seguenti:
Main-Class: A
Class-Path: B.jar C.jar
Riassumendo:
- sforzati di usare il comando jar (è veramente facile per le cose
base)
- scrivi un manifest corretto
- scrivi A invece di A.class
- per eseguire usa javaw -jar oppure javaw -jar
- facci sapere...
-- 
Ciao
	Fabrizio C.

 javaw -jar A.jar
Mi dice: Could not find main class. Program will exit!


> prova a togliere .class
Non cambia nulla!


 - facci sapere...
Ok, ti faccio sapere che non è cambiato nulla.
Ora ti chiedo un favore: sto impazzendo, il mio programma è di 87Kb zippati,
che ne dici, posso spedirtelo cosi non impazzisco da solo?
Se non vuoi pubblicare la tua e-mail in NG mandami una e-mail a me
all'indirizzo Marc...@Hotmail.com
Grazie!


Mi dice: Could not find main class. Program will exit!
E' un modo meno "verboso" di dire la stessa cosa di sopra.
-- 
Ciao
	Fabrizio C.

Se non vuoi pubblicare la tua e-mail in NG
La mail che puoi vedere è perfettamente valida (togli i NOSPAM), non
posso dire altrettanto delle eventuali (e non assicurate) risposte.
-- 
Ciao
	Fabrizio C.

 posso dire altrettanto delle eventuali (e non assicurate) risposte.
Io invio e spero bene!
Ciao!


Io invio e spero bene!
Lo so che sono troppo buono...
Mi č tornato in mente un vecchio discorso (un bug?).
Ciň che mi hai mandato (č l'ultima volta perň) č giusto, ma il tuo
file Manifesto.txt (dove c'č l'indicazione della Main-Class) deve
terminare con un return.
Cioč al termine della linea
Main-Class: A
devi battere un "Invio"!!!
Riprova.
Non so di dove sei, ma se passo di lě _devi_ pagarmi un succo di
frutta ;-)
-- 
Ciao
	Fabrizio C.

 frutta ;-)
Se scendi al sud te ne offro una botte intera!
Grazie!
