java - 使用 Maven 组装插件创建大型压缩程序集

  显示原文与译文双语对照的内容
0 0

我是 Having的一个问题,创建一个更大的zip程序集( 解压缩超过 3 GB ) 使用 maven-assembly-plugin 。 生成输出zip文件( 压缩到 1 GB ) 时出现问题。 使用选项 -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)

环顾周围我发现问题来自 Zip64/jre ( 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,但要避免,除非不可避免。

时间: 原作者:

0 0

我找到了罪魁祸首,因此报告这个问题只是为了节省别人的时间。

看来问题是 org.codehaus.plexus.archiver.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:352) 如我的异常堆栈跟踪中所述。 看看那些 org.codehaus...ZipOutputStream.closeEntry 我可以看到:


entry.setSize( def.getTotalIn() );

那个 defjava.util.zip.Deflater 。 但是,Deflater.getTotalIn 返回 int 而不是 long 。 相反,代码应该使用 Deflater.getBytesRead(),我将向开发者报告。

原作者:
...