Почему java жалуется на файлы jar с большим количеством записей?
Я наткнулся на следующую проблему: когда я создаю файл .jar
с более чем 65k записей, java жалуется на "Недопустимый или поврежденный jarfile". Пример:
$ # 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
Но если я использую немного меньше файлов, он работает:
$ jar cf app.jar {1..60000}
$ java -jar app.jar
no main manifest attribute, in app.jar
Я слышал, что в старом формате .zip
было ограничение файлов на 65 тыс. файлов, но Java 7 по умолчанию уже должен использовать ZIP64. Почему это происходит? Есть ли способ исправить это?
Ответы
Ответ 1
Почему это происходит?
Это ошибка в Java 1.7.0 (иначе Java 7)
Исправлено в Java 1.7.0 p40 или новее, видимо.
Есть ли способ исправить это?
Согласно отчету об ошибке, обходным путем (для Java 1.7.0) является запуск приложения без использования опции -jar
.
FWIW, есть также ошибка в обработке javac
файлов JAR в формате ZIP64: