2013-08-26 12 views
12

Natknąłem się na następujący problem - kiedy tworzę plik .jar z więcej niż 65k wpisów, java narzeka "Nieprawidłowy lub uszkodzony plik jar". Przykład:Dlaczego java narzeka na pliki jar z dużą liczbą wpisów?

$ # 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 

Ale jeśli mogę użyć nieco mniej plików, to działa:

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

Słyszałem, że tam był pliki 65k ograniczenia w starym formacie .zip plików, ale Java 7 należy użyć ZIP64 domyślnie już. Dlaczego to się dzieje? Czy istnieje sposób, aby to naprawić?

+0

słoiku jest odmianą Java ZIP. Chociaż może to naprawić pewne problemy, może to być przyczyną innych ulepszeń. Sugeruję, żebyś nie umieszczał kilku plików w JAR-ie;) –

+1

@PeterLawrey - Tak, podział rzeczy pomiędzy kilka mniejszych plików .jar jest oczywistym obejściem, ale jest bardzo niezgrabny. W każdym razie nie jest normalne, aby mieć tak niski limit ilości plików. Może jest już otwarty błąd na ten temat? – Rogach

+0

Mam nadzieję, że tak, ale zawsze możesz się zalogować, jeśli nie możesz go znaleźć. –

Odpowiedz

13

Dlaczego tak się dzieje?

Jest to błąd w Java 1.7.0 (aka Java 7)

Naprawiono w Javie 1.7.0 p40 lub nowszej, podobno.

Czy istnieje sposób, aby to naprawić?

Zgodnie z raportem o błędzie, obejście problemu (w przypadku Java 1.7.0) polega na uruchomieniu aplikacji bez użycia opcji -jar.


FWIW, istnieje również błąd w javac s obsługi ZIP64 plików formatu JAR:

+0

Jeśli utworzysz plik wykonywalny asembler i niestety pliki liczbowe mają więcej niż 64K (zdarzyło się to ze mną), wtedy nie możesz uruchomić go z 'java '. –

+1

@SammyaKanti - Możesz, jeśli uaktualnisz do Javy 8, na przykład. –

Powiązane problemy