|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
Eseguire file .jar
Allora raga, ho fatto le seguenti cose:
1) compilato i java -> class 2) ho due directory, una COM... con dentro l'alberatura e tutti i class, l'altra META-INF con dentro MANIFEST.MF 3) ho creato il jar con: C:\Programmi\Java\jdk1.6.0_04\bin\jar.exe -cvfm progetto.jar META-INF\MANIFEST.MF *.* 4) il MANIFEST.MF è il seguente: Manifest-Version: 1.0 Class-Path: C:\work\progetto.jar;C:\...\pippo.jar;C:\...\pluto.jar;C:\...\paperino.jar Created-By: 1.6.0_04 (Sun Microsystems Inc.) Main-Class: Com\..\Alberatura\..\..\MainClass (riga vuota) 5) mi posiziono in una directory di appoggio, c:\work, con dentro il jar e il bat, lancio il bat che contiene la seguente istruzione: start "Progetto" C:\...\bin\javaw -cp "C:\work\progetto.jar;C:\...\pippo.jar;C:\...\pluto.jar;C:\...\paperino.jar" Com\..\Alberatura\..\..\MainClass x y z dove x y z sono parametri che voglio passare al main. Risultato: Could not find the mail class. Program will exit! Ovviamente il progetto lanciato da eclipse o similia non dà problemi di classnotfoundexception etc. Grazie a tutti, Td |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Comunque ci sono diverse cose sbagliate: a) Main-Class: Com\..\Alberatura\..\..\MainClass Non devi mettere un "path" con \ o /!!! Devi mettere un nome di classe "fully qualified", completamente qualificato. Es. com.pippo.MainClass b) Class-Path: C:\work\progetto.jar;C:\...\pippo.jar;C:\...\pluto.jar;C:\...\paperino.jar 1) Pessima idea quella di specificare path assoluti. 2) Le specifiche del file JAR dicono che Class-Path deve specificare un insieme di URL relativi (non assoluti) separati da uno o più spazi per le eventuali librerie richieste dalla applicazione. Quindi essendo degli URL devi usare al massimo il / come separatore e se proprio volessi (ma come ho detto non è buona cosa) mettere path assoluti, dovresti mettere file:///C:/blabla...... Scusa ma se vuoi mettere Main-Class nel manifest (per poter avviare direttamente il jar), che ti serve usare tutta 'sta roba???
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 11-04-2008 alle 22:21. |
||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
Hai ragione, domani modifico, purtroppo non posso eseguirlo con successo da casa ma voglio vedere se riesco a levare main class not found come errore.
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
E' possibile fare un jar senza main?Mi riferisco alla tua ultima osservazione! |
|
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Se non si mette Main-Class si può comunque avviare la applicazione ma il jar va messo esplicitamente in "classpath" (variabile di ambiente CLASSPATH, opzione -classpath o magari anche nella 'ext' del JRE) e poi va avviata la JVM specificando il nome della classe. Es: java -classpath tua_app.jar com.pippo.MainClass Chiaramente mettere l'attributo Main-Class ma poi non avviare il jar direttamente non serve a molto .... ![]() Se invece intendi un jar che non contiene alcuna classe che ha il main() statico, la risposta è ancora sì. In tal caso sarà una jar che farà presumibilmente da "libreria" per altre applicazioni.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 12-04-2008 alle 10:10. |
||
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
allora vediamo se ho fatto bene.
innanzi tutto lancio il jar con javaw -cp invece che con -jar. attualmente, sotto c:\work: C:\...\javaw.exe -cp progetto.jar parametro1 parametro2 inoltre il file di manifest è il seguente, considerando che sono posizionato sotto c:\work e alcuni jar che viglio usare sono sotto diciamo c:\eseguibili: Class-Path: progetto.jar ../eseguibili/pippo.jar ../eseguibili/pluto.jar ../eseguibili/paperino.jar Main-Class: COM.x.x.x.MiaMainClass Saluti e grazie 1000 Ultima modifica di tylerdurden83 : 14-04-2008 alle 10:42. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Per il resto gli altri path sono tecnicamente corrretti ... ovviamente quei jar devono esistere lì dove sono richiesti. Come credo (a questo punto non credo più....) di aver spiegato nella discussione, si mette l'attributo Main-Class per poter avviare direttamente il jar con java(w) -jar progetto.jar Se sei tu a mettere esplicitamente in classpath il jar usando -cp/-classpath, quell'attributo Main-Class non viene usato e nel comando sei sempre tu che devi mettere esplicitamente il nome della classe che ha il main. Es. java(w) -classpath progetto.jar COM.x.x.x.MiaMainClass
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
Quindi, secondo quello che mi hai scritto, ora ho:
Manifest: Class-Path: ../eseguibili/pippo.jar ../eseguibili/pluto.jar ../eseguibili/paperino.jar Main-Class: COM.xxx.MiaMainClass C:\...\javaw.exe -jar progetto.jar parametro1 parametro2 In pratica ho tolto il jar stesso dal path nel manifest, e lo lancio con javaw -jar progetto.jar così da sfruttare l'attributo main class del manifest. Dove sbaglio ora? |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Tecnicamente ora è corretto. Cosa non va ... non posso saperlo. Che problemi/errori ti dà? Amesso che tutti i jar siano lì dove devono essere, sono creati correttamente?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
i jar che non sono il mio progetto sono dove devono essere e creati correttamente (non fatti da me, funzionanti qualora lancio il mio progetto da eclipse e tutto il resto).
l'errore che mi appare su schermo è sempre quello che non trova la main class :/ |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ah, c'è una questione in generale riguardo le linee nel manifest. Non devono essere più lunghe di 72 byte. Nel Class-Path gli URL dovresti metterli su più righe e ogni riga deve iniziare con lo spazio.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
Quote:
ho provato a fare come mi hai detto per il classpath ma da errore lo stesso ![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
qualche idea
![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
ffs dava quel problema xke la versione di java virtual machine che usavo sul pc di es e a cui facevo riferimento chiamando javaw era piu vecchia di quella ke avevo usato per creare i class
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:08.