我在使用 maven-Assembly-plugin 创建更大的 zip 程序集(未压缩占用超过 3GB)时遇到问题。构建输出 zip 文件(压缩后小于 1GB)时会出现此问题。使用选项
-e
运行 Maven 可以为我提供更详细的信息:
[INFO] Building zip: xxx/HG19-UCSC-dist.zip
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12:40.199s
[INFO] Finished at: Wed Oct 02 11:08:44 BST 2013
[INFO] Final Memory: 13M/723M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single (make-assembly) on project HG19: Execution make-assembly of goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single failed: invalid entry size -> [Help 1]
...
...
...
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution make-assembly of goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single failed: invalid entry size
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:115)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 19 more
Caused by: java.lang.IllegalArgumentException: invalid entry size
at java.util.zip.ZipEntry.setSize(ZipEntry.java:135)
at org.codehaus.plexus.archiver.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:352)
at org.codehaus.plexus.archiver.zip.ZipOutputStream.finish(ZipOutputStream.java:316)
环顾四周,我发现问题来自于我的 JDK/JRE 中缺少对 Zip64 的支持(https://blogs.oracle.com/xuemingshen/entry/zip64_support_for_4g_zipfile),该支持于 2011 年添加到 OpenJDK 中。
但是,我已将 JDK 更新为 Oracle 提供的最新版本:
$ mvn -version
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 03:15:32+0100)
Maven home: /usr/local/apache-maven-3.1.0
Java version: 1.7.0_40, vendor: Oracle Corporation
Java home: /usr/local/java/jdk1.7.0_40/jre
Default locale: en_GB, platform encoding: ISO-8859-1
OS name: "linux", version: "2.6.32-279.2.1.el6.x86_64", arch: "amd64", family: "unix"
它再次报告同样的问题。最新的 Oracle JDK 是否不支持 Zip64 或者有其他支持?
我想,我可以尝试从源代码构建 OpenJDK b147,但希望避免这种情况,除非不可避免。
[编辑]已经有一段时间了,但我看到人们在读这篇文章,所以仅供参考,自 Maven 程序集插件版本
2.5
以来,问题已得到解决。
我找到了罪魁祸首,所以报告这个问题只是为了节省其他人的时间。
问题似乎出在我的异常堆栈跟踪中报告的
org.codehaus.plexus.archiver.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:352)
。查看org.codehaus...ZipOutputStream.closeEntry
的来源我可以看到:
entry.setSize( def.getTotalIn() );
并且
def
是java.util.zip.Deflater
。但是, Deflater.getTotalIn
返回 int
而不是 long
。相反,代码应该使用 Deflater.getBytesRead()
,我将向开发人员报告。
遇到同样的问题。 在构建项目的 jar 时,偶尔会出现一个非常大(3GB)的日志文件,这导致了问题。 文件删除后没有错误,目标 jar 的大小又恢复到 10Mb 以下。
正如我们所看到的这里,(ZipEntry 类),这个问题已在 JDK 1.7 中得到修复。
您已经证明,从命令行运行的
mvn
显示 JDK 版本 1.7。
您是否尝试以相同的方式完成构建,我的意思是从命令行(而不是IDE,它可以为maven使用另一个JDK?)
我在使用
shade
插件时遇到了类似的问题(OP 中的相同错误),这是由于打包前未运行 mvn clean
导致的。
我来到这里是因为我在构建时收到“无效条目大小”消息。 然后我意识到我最近在 src/main/resources 中添加了不应该在构建中的大文件。 这只是提醒那些可能“突然”出现此错误的人;您可能包含了不应包含的文件。