2013-10-02 33 views
1

我在使用maven-assembly-plugin創建一個較大的zip組件(未壓縮需要超過3GB)時遇到問題。構建輸出壓縮文件時(壓縮小於1GB)會發生該問題。與選項-e運行Maven給了我一個更詳細的信息:使用maven-assembly-plugin創建一個大的zip組件

[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缺少ZIP64支持/ JRE(https://blogs.oracle.com/xuemingshen/entry/zip64_support_for_4g_zipfile),將其加入到OpenJDK的2011年

不過,我已經更新了我的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

請使用當前版本2.4的[maven-assembly-plugin](http://maven.apache.org/plugins/maven-assembly-plugin/)的最新版本。 – khmarbaise

+0

謝謝,我沒有想到這一點。不幸的是,它沒有多大幫助: '[錯誤]無法執行目標org.apache.maven.plugins:maven-assembly-plugin:2.4:項目HG19上的單個(make-assembly):執行make-assembly of goal org.apache.maven.plugins:maven-assembly-plugin:2.4:單一失敗:無效的條目大小 - > [幫助1]' – Jacek

回答

6

我找到了罪魁禍首,所以報告的問題只是爲了節省其他時間。

看來問題出在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 Assembly插件版本2.5以來,問題已得到解決。

+0

在Maven倉庫中搜索最新版本(https://mvnrepository.com/) – EmeraldTablet

0

我們可以看到here, (ZipEntry class),這已在JDK 1.7中修復。

您已經顯示您的mvn從命令行運行將顯示JDK版本1.7。

你是不是想以同樣的方式來完成的身材,我命令行平均(而不是IDE,它可以使用另一個JDK Maven的?)

+0

是的,正好。爲了構建這個項目,我使用命令行'mvn -e install',就像'mvn -version'顯示的那樣 – Jacek

+0

順便說一句,我們提到的b147似乎對我有點神祕。最新的Oracle JDK 1.7.0_u40報告了Java HotSpot(TM)64位服務器虛擬機(版本24.0-b56,混合模式)'Java(TM)SE運行時環境(內部版本1.7.0_40-b43) 「,遠遠落後於b147那是在2011年報告的。 – Jacek

+0

你可以看看你的JDK安裝的'src.zip'文件,並檢查'java/util/zip/ZipEntry.java'的'setSize'方法。它是否檢查大小沒有大小> 0xFFFFFFFFL'條件? – Kerb

0

遇到同樣的問題。 構建項目的jar時,偶爾會找到一個非常大的(3GB)日誌文件,這就引發了這個問題。 文件被刪除後,目標jar的大小回到10Mb以下沒有錯誤。

0

我在使用shade插件時出現類似問題(OP中出現相同錯誤),這是由於在打包前未運行mvn clean引起的。