【问题标题】:Why java complains about jar files with lots of entries?为什么 java 抱怨 jar 文件有很多条目?
【发布时间】:2013-08-28 18:18:15
【问题描述】:

我偶然发现了以下问题 - 当我创建具有超过 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。为什么会这样?有办法解决吗?

【问题讨论】:

  • JAR 是 Java 的 ZIP 变体。虽然它可能已经解决了一些问题,但它可能落后于其他改进。我建议你一开始不要把很多文件放在一个 JAR 中;)
  • @PeterLawrey - 是的,在几个较小的 .jar 文件之间拆分内容是显而易见的解决方法,但它非常笨重。无论如何,文件数量有这么低的限制是不正常的。也许已经有关于这个的错误打开了?
  • 我希望如此,但如果找不到,您可以随时记录另一个。
  • 似乎修复只会出现在 Java 8 中:(
  • 我怀疑的旧的向后兼容性问题。

标签: java scala jar zip java-7


【解决方案1】:

为什么会这样?

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

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

有办法解决吗?

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


FWIW,javacs 处理 ZIP64 格式的 JAR 文件也有一个错误:

【讨论】:

  • 如果你创建了一个可执行的程序集 jar 并且不幸的是数量文件增长超过 64K(发生在我身上),那么你不能用 java <big-executable-assembly-jar> 运行它。
  • @SoumyaKanti - 例如,如果您升级到 Java 8,则可以。
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2020-08-12
  • 2016-02-27
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多