PDA

View Full Version : [BUG #3] Failed to load Main-Class manifest attribute from DiamondCrush.sh


BlueDragon
25-04-2006, 13:36
Apro il thread qui così non continuiamo a parlarne nel Bug Report thread ;)


Codice:
sh DiamondCrush.sh
executing "java -Djava.library.path=lib/linux -jar DiamondCrush.sh"
Failed to load Main-Class manifest attribute from DiamondCrush.sh

La soluzione forse è qua: http://forum.java.sun.com/thread.jspa?threadID=549376&messageID=2680601

La versione è quella Linux a 32 bit.

Il problema non è quello più banale, cioé l'essersi dimenticati l'attributo Main-Class nel manifest, ma direi che il link segnalato da Ufo contiene probabilmente la soluzione: unix e windows gestiscono diversamente gli "a capo" :)
Può essere che il manifest di Linux abbia gli a capo non corretti e quindi l'attributo non viene caricato.

Anche se mi sembra un po' strano il fatto che non ce ne siamo accorti prima, visto che molti di noi nel progetto hanno Linux..forse c'è stata una modifica all'ultimo momento nel manifest?

Vi riporto qui alcuni post salienti nel thread indicato da Ufo su Java Sun Forum:

I'm guessing that you are developing in windows.

One diference between unix and windows' file system is that text files in unix always have a final linebreak at the end of the file, while windows doesn't need to.

Java, being developed by Sun primarily for the unix comunity requires that the manifest file ends with a new-line.

no new-line, no manifest file.


The JAR tool is rather finicky. I have found that each HEADER:VALUE pair must be separated by a newline but not more than 1 newline. When I tried putting blank lines in the MANIFEST, I would get "Error: failed to load Main-Class attribute...". Sun needs to update their tutorials or fix this problem with the JAR tool's manifest parser. I put a sample MANIFEST.MF below (it works).

Manifest-Version: 1.0
Name: com/co_name/software_name/
Main-Class: com.co_name.software_name.MainClass
Sealed: true

^TiGeRShArK^
25-04-2006, 13:46
meno male che ho aggiornato la pagina :D
stavo x aprire pure io la stessa disucssione :p
comunque ora sto scaricando il jar per linux così controllo, ma ad occhio mi pare difficile che il problema possa essere nella newline finale....
più probabilmente mi sa che risiede nel wrapping che ant fa del manifest a 70 colonne.
Comunque appena finisco di scaricare gli do un occhiata e vedo se riesco a capirne qualcosa....

fek
25-04-2006, 13:46
Questo vuol dire che dobbiamo creare un file manifest nostro e dire ad Ant di inserirlo, invece che farglielo creare a lui automaticamente.

Chi se ne vuole occupare?

^TiGeRShArK^
25-04-2006, 13:51
provo io....
tra l'altro ho visto che un altra possibile causa potrebbe essere il DOPPIO newline alla fine del file...
ed è risaputo che i manifest quando incontrano una blank line prima della fine del file scazzano.....
Per quanto riguarda il wrapping di ant invece sembrerebbe che sia una cosa normale in quanto segue le specifiche del manifest java (però sui cellulari non c'era verso di farlo funzionare in quel modo :muro: )
Ora vedo se si possono eliminare quei due blank alla fine lasciandone uno solo direttamente da ant senza usare un nostro manifest.

BlueDragon
25-04-2006, 13:55
Chi se ne vuole occupare?
Mi piacerebbe occuparmene ma non ho un sistema Linux disponibile, quindi cedo la palla :)

Comunque se fosse necessario dire ad Ant di usare un manifest già fatto, basta usare l'attributo manifest nel task di jar ed eliminare l'elemento manifest annidato che usiamo al momento per definirlo al volo :)
http://ant.apache.org/manual/CoreTasks/jar.html

^TiGeRShArK^
25-04-2006, 14:00
Mi piacerebbe occuparmene ma non ho un sistema Linux disponibile, quindi cedo la palla :)

Comunque se fosse necessario dire ad Ant di usare un manifest già fatto, basta usare l'attributo manifest nel task di jar ed eliminare l'elemento manifest annidato che usiamo al momento per definirlo al volo :)
http://ant.apache.org/manual/CoreTasks/jar.html
ehm..
in effetti nemmeno io posso provarlo.... :fagiano:
posso fare l'ant col manifest nostro (dato che dal build.xml dove lo generiamo non posso cambiare niente), però poi dovrebbe provarlo qualcuno con linux...
anzi.. dovrebbe provarlo proprio l'utente a cui da l'errore, perchè non mi pare che si presenti a tutti.

fek
25-04-2006, 14:12
Possiamo contattare quello con il problema e passargli una build con il fix da testare?

Ufo13
25-04-2006, 14:15
Possiamo contattare quello con il problema e passargli una build con il fix da testare?

certo, ti passo la mail su MSN se vuoi

^TiGeRShArK^
25-04-2006, 14:17
mamma ke palle! :mad:
ho provato in tutti i modi a cacciare quel doppio blank, ma non c'è niente da fare....
anche se faccio un MANIFEST.MF corretto e lo carico nel jar col comando <jar destfile="${dist}/DiamondCrush.jar" basedir="${bin}/release" manifest="MANIFEST.MF"/>
alla fine me lo ritrovo sempre sballato...addirittura cambia pure l'ordine degli elementi come vuole lui e se ne sbatte di me :cry:
ah... ovviamente continua a wrappare a 70 linee.....
non ho idea su cosa fare... :fiufiu:

^TiGeRShArK^
25-04-2006, 14:22
un possibile work-around che mi viene in mente sarebbe modificare il tag execute:
<execute>java -Djava.library.path=lib/win32 -jar DiamondCrush.exe</execute>
in questo modo:
<execute>java -Djava.library.path=lib/win32 -jar DiamondCrush.exe it.diamonds.Game</execute>
in tutte le righe di execute per i vari sistemi operativi....

fek
25-04-2006, 14:38
Prova cosi' allora.

^TiGeRShArK^
25-04-2006, 14:43
ho provato sotto win e ovviamente non funge....
mi sa che l'exe vuole per forza l'attributo main-class nel jar....
il bello è che non posso nemmeno vedere l'errore che da perchè quando lancio diamondcrush.exe da una finestra dos me ne apre un'altra e la richiude subito senza farmi vedere niente..:muro:

VICIUS
25-04-2006, 14:47
È strano. Ho provato su 6 computer diversi con 3 distribuzioni (debian sid, opensuse, fedora) diverse e non si è mai presentato questo errore. :(

ciao ;)

^TiGeRShArK^
25-04-2006, 15:00
alla fine grazie al suggerimento di blue (abbiamo inventato il pair bug-hunting :D) sono riuscito a fargli bypassare la lettura di quell'attributo dal manifest...
ma mi è sorto un dubbio..
non è che la persona a cui si presenta il bug ha java 1.4???
perchè a me i problemi della lettura degli attribute del manifest si presentavano quando erano wrappati, ma sui cellulari, che sono basati proprio su java 1.4 come compiler....

VICIUS
25-04-2006, 15:04
alla fine grazie al suggerimento di blue (abbiamo inventato il pair bug-hunting :D) sono riuscito a fargli bypassare la lettura di quell'attributo dal manifest...
ma mi è sorto un dubbio..
non è che la persona a cui si presenta il bug ha java 1.4???
perchè a me i problemi della lettura degli attribute del manifest si presentavano quando erano wrappati, ma sui cellulari, che sono basati proprio su java 1.4 come compiler....
È un dubbio che è venuto pure a me. Prima di procedere con il problema è meglio chiedere. :)

ciao ;)

^TiGeRShArK^
25-04-2006, 15:23
infatti ci siamo messi in stand-by in attesa del bug-report completo :D

VICIUS
01-05-2006, 01:41
Bug Closed. :)