2013-08-26 81 views
12

我偶然發現了以下問題 - 當我創建了超過65k條目的.jar文件時,java會抱怨「無效或損壞的jarfile」。例如:爲什麼java抱怨有很多條目的jar文件?

$ # in fresh dir 
$ for i in {1..70000}; do touch $i; done 
$ jar cf app.jar {1..70000} 
$ java -jar app.jar 
Error: Invalid or corrupt jarfile app.jar 

但是,如果我用少一點的文件,它的工作原理:

$ jar cf app.jar {1..60000} 
$ java -jar app.jar 
no main manifest attribute, in app.jar 

我聽到有65K文件的限制,在舊.zip文件格式,但Java 7的默認情況下應使用ZIP64已經。這是爲什麼發生?有沒有辦法解決它?

+0

一個JAR是ZIP Java的變化。雖然它可能已經解決了一些問題,但它可能落後於其他改進。我建議你不要把一些很多文件放在JAR中;) –

+1

@PeterLawrey - 是的,在幾個較小的.jar文件之間拆分東西是顯而易見的解決方法,但它非常笨重。無論如何,文件數量的這種下限是不正常的。也許有關於這個問題已經開放的錯誤? – Rogach

+0

我希望如此,但如果你找不到它,你總是可以登錄另一個。 –

回答

13

這是怎麼發生的?

這是一個Java 1.7.0(又名Java 7的)錯誤

固定在Java 1.7.0 p40或更高版本,顯然。

有沒有辦法解決它?

根據bug報告,解決方法(對於Java 1.7.0)是不使用-jar選項啓動應用程序。


FWIW,也有在javac的操控性的ZIP64格式的JAR文件中的錯誤:

+0

如果您創建一個可執行文件不幸的是,數字文件增長超過64K(與我一起發生),那麼你不能用'java '運行它。 –

+1

@SoumyaKanti - 如果你升級到Java 8,例如。 –

相關問題