为什么java会抱怨有大量条目的jar文件?

我偶然发现了以下问题 – 当我创建包含超过65k条目的.jar文件时,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文件格式有65k文件限制,但Java 7默认情况下应该使用ZIP64。 为什么会这样? 有办法解决吗?

为什么会这样?

这是Java 1.7.0(又名Java 7)中的一个错误

显然,在Java 1.7.0 p40或更高版本中已修复。

有办法解决吗?

根据错误报告,解决方法(对于Java 1.7.0)是在不使用-jar选项的情况下启动应用程序。


FWIW, javac处理ZIP64格式的JAR文件时也存在一个错误: