使用 maven-assemble-plugin 创建一个大型 zip 程序集

问题描述 投票:0回答:5

我在使用 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,但希望避免这种情况,除非不可避免。

java maven zip maven-assembly-plugin
5个回答
7
投票

[编辑]已经有一段时间了,但我看到人们在读这篇文章,所以仅供参考,自 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()
,我将向开发人员报告。


1
投票

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


0
投票

正如我们所看到的这里,(ZipEntry 类),这个问题已在 JDK 1.7 中得到修复。

您已经证明,从命令行运行的

mvn
显示 JDK 版本 1.7。

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


0
投票

我在使用

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.