2013-08-26 18 views
12

Mi sono imbattuto nel seguente problema: quando creo il file .jar con più di 65.000 voci, java si lamenta "jarfile non valido o danneggiato". Esempio:Perché java si lamenta di file jar con molte voci?

$ # in fresh dir 
$ for i in {1..70000}; do touch $i; done 
$ jar cf app.jar {1..70000} 
$ java -jar app.jar 
Error: Invalid or corrupt jarfile app.jar 

Ma se io uso un po 'meno file, funziona:

$ jar cf app.jar {1..60000} 
$ java -jar app.jar 
no main manifest attribute, in app.jar 

Ho sentito che c'era limitano file 65k in formato .zip vecchio file, ma Java 7 dovrebbero usare ZIP64 di default già. Perché sta succedendo? C'è un modo per risolverlo?

+0

UN VASO è la variazione di Java di ZIP. Mentre potrebbe aver risolto alcuni problemi, potrebbe essere dietro per altri miglioramenti. Vi suggerisco di non mettere alcuni file in un JAR in primo luogo;) –

+1

@PeterLawrey - Sì, suddividere i file tra diversi file .jar più piccoli è la soluzione ovvia, ma è molto goffo. Ad ogni modo, non è normale avere un limite così basso sull'importo del file. Forse c'è già un bug aperto su questo? – Rogach

+0

Lo spero, ma puoi sempre registrarne un altro se non riesci a trovarlo. –

risposta

13

Perché sta succedendo?

Si tratta di un bug in Java 1.7.0 (aka Java 7)

Risolto in Java 1.7.0 p40 o successivo, apparentemente.

C'è un modo per risolvere il problema?

In base al bug report, la soluzione alternativa (per Java 1.7.0) è avviare l'applicazione senza utilizzare l'opzione -jar.


FWIW, v'è anche un bug in javac s gestione dei file in formato JAR ZIP64:

+0

Se si crea un eseguibile assembly jar e sfortunatamente i file numerici crescono più di 64K (è successo con me), quindi non è possibile eseguirlo con 'java '. –

+1

@SoumyaKanti - È possibile eseguire l'aggiornamento a Java 8, per esempio. –

Problemi correlati