Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-04-2008, 18:04   #1
tylerdurden83
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
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2008, 22:01   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
3) ho creato il jar con:

C:\Programmi\Java\jdk1.6.0_04\bin\jar.exe -cvfm progetto.jar META-INF\MANIFEST.MF *.*
Solo per chiarezza e precisazione: il file di manifest che passi al tool jar non sei obbligato affatto a chiamarlo MANIFEST.MF e a metterlo in una directory META-INF. Può essere un nome qualunque.

Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
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)
Non sei obbligato a mettere Manifest-Version o Created-By, ci penserebbe comunque il tool jar a metterli.

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......

Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
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
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.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2008, 23:11   #3
tylerdurden83
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.
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2008, 23:30   #4
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da andbin Guarda i messaggi
Solo per chiarezza e precisazione: il file di manifest che passi al tool jar non sei obbligato affatto a chiamarlo MANIFEST.MF e a metterlo in una directory META-INF. Può essere un nome qualunque.

Non sei obbligato a mettere Manifest-Version o Created-By, ci penserebbe comunque il tool jar a metterli.

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???
inserendo nel valore class-path url relativi, gli stessi devono puntare a percorsi sullo stesso livello del jar,giusto?

E' possibile fare un jar senza main?Mi riferisco alla tua ultima osservazione!
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2008, 10:08   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
inserendo nel valore class-path url relativi, gli stessi devono puntare a percorsi sullo stesso livello del jar,giusto?
Per URL "relativi" si intendono cose del tipo: ../other.jar (nella directory superiore) oppure lib/other.jar (nella sottodirectory 'lib'). Sono appunto relativi al jar che contiene questi riferimenti.

Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
E' possibile fare un jar senza main?Mi riferisco alla tua ultima osservazione!
Se intendi senza l'attributo Main-Class, sì è possibile. Specificare l'attributo Main-Class serve solo se si vuole avviare direttamente il jar con java -jar tua_app.jar.

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.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10:33   #6
tylerdurden83
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.
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 11:35   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
Class-Path: progetto.jar ../eseguibili/pippo.jar ../eseguibili/pluto.jar ../eseguibili/paperino.jar
Non capisco perché devi mettere il nome del jar sé stesso nel manifest!!!
Per il resto gli altri path sono tecnicamente corrretti ... ovviamente quei jar devono esistere lì dove sono richiesti.

Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
Main-Class: COM.x.x.x.MiaMainClass
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 12:57   #8
tylerdurden83
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?
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 13:10   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
Class-Path: ../eseguibili/pippo.jar ../eseguibili/pluto.jar ../eseguibili/paperino.jar
Main-Class: COM.xxx.MiaMainClass

C:\...\javaw.exe -jar progetto.jar parametro1 parametro2

Dove sbaglio ora?
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 13:34   #10
tylerdurden83
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 :/
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 13:40   #11
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
l'errore che mi appare su schermo è sempre quello che non trova la main class :/
Anche il tuo jar è corretto? Aprilo con WinZip (o simile) e verifica: a) struttura dei package/classi e b) il contenuto del manifest (è in META-INF/MANIFEST.MF).

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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14:27   #12
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da andbin Guarda i messaggi
Anche il tuo jar è corretto? Aprilo con WinZip (o simile) e verifica: a) struttura dei package/classi e b) il contenuto del manifest (è in META-INF/MANIFEST.MF).

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.
si il jar è corretto come alberatura e tutto
ho provato a fare come mi hai detto per il classpath ma da errore lo stesso
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2008, 12:46   #13
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
qualche idea ?
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2008, 18:57   #14
tylerdurden83
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
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
SpaceX annuncia l'undicesimo volo del ra...
CMF lancia le sue prime cuffie over-ear:...
Condannata a Londra la protagonista dell...
Addio Amazon? ChatGPT ora ti fa comprare...
YouTube chiude la causa con Trump: accor...
Avio: contratto da 40 milioni di € da ES...
Claude Sonnet 4.5, il nuovo modello di A...
Silent Hill f è un successo: gi&a...
Nuova Jeep Compass: aperti i preordini p...
La PS5 Slim con SSD più piccolo s...
Zero combustibili fossili e controllo qu...
Corsair NAUTILUS 360 RS LCD: raffreddame...
Nuovo record nel mondo dei computer quan...
Sony e Universal combatteranno l'IA con....
Il Chips Act europeo attuale è un...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:25.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v