【问题标题】:Create a large zip assembly with maven-assembly-plugin使用 maven-assembly-plugin 创建一个大型 zip 程序集
【发布时间】:2022-05-09 17:15:07
【问题描述】:

我在使用 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 (https://blogs.oracle.com/xuemingshen/entry/zip64_support_for_4g_zipfile) 中缺少对 Zip64 的支持,该支持于 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-assembly-plugin,目前是 2.4 版。
  • 谢谢,我没想到。不幸的是,它并没有多大帮助:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (make-assembly) on project HG19: Execution make-assembly of goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single failed: invalid entry size -> [Help 1]

标签: java maven zip maven-assembly-plugin


【解决方案1】:

我找到了罪魁祸首,所以报告这个问题只是为了节省其他人的时间。

问题似乎在于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(),我将向开发人员报告。

[编辑] 已经有一段时间了,但我看到人们在阅读这篇文章,所以仅供参考,自 maven 程序集插件的版本 2.5 以来问题已得到修复。

【讨论】:

  • 在 maven 仓库 (mvnrepository.com) 中搜索截至目前的最新版本
  • @Jacek,我有同样的错误,但我不知道如何更新 maven 程序集插件版本。你能帮助我吗? :)
【解决方案2】:

遇到了同样的问题。 构建项目的 jar 时偶尔会拾取一个非常大 (3GB) 的日志文件,这导致了问题。 删除文件后没有错误,目标 jar 的大小恢复到 10Mb 以下。

【讨论】:

    【解决方案3】:

    我们可以看到here, (ZipEntry class),这已在 JDK 1.7 中修复。

    您已经证明,从命令行运行的 mvn 显示 JDK 版本 1.7。

    您是否尝试以相同的方式完成构建,我的意思是从命令行(而不是 IDE,它可以为 maven 使用另一个 JDK?)

    【讨论】:

    • 是的,完全正确。为了构建项目,我使用命令行 mvn -e install 很像 mvn -version 所示
    • 顺便说一句,我们提到的 b147 对我来说似乎有点神秘。最新的 Oracle JDK 1.7.0_u40 报告 Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode) 远远落后于 2011 年报告的 b147。
    • 你能不能看看你的JDK安装的src.zip文件,并检查java/util/zip/ZipEntry.javasetSize方法。它是否在没有size > 0xFFFFFFFFL 条件的情况下检查大小?
    • 有趣的是,java/util/zip/ZipEntry.java 不检查 size > 0xFFFFFFFFL 条件。我还搜索了所有来源,似乎字符串invalid entry size 仅在java/util/zip/ZipEntry.java 中以这种形式出现。我现在看到两个选项:要么 maven 使用了错误的 JDK,尽管它 reports 1.7.0_u40,要么 src.zip 和实际的二进制文件不一致(我简直不敢相信)。
    【解决方案4】:

    我在使用 shade 插件时遇到了类似的问题(OP 中的相同错误),这是由于在打包之前未运行 mvn clean 而导致的。

    【讨论】:

      【解决方案5】:

      我来到这里是因为我在构建时收到了“无效条目大小”的消息。 然后我意识到我最近在 src/main/resources 中添加了不应该在构建中的大文件。 这只是对任何可能处于“突然”出现此错误的情况的人的提醒;您可能包含了不应包含的文件。

      【讨论】:

        猜你喜欢
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 2011-11-15
        • 2013-02-19
        • 2017-07-07
        • 2010-12-02
        相关资源
        最近更新 更多