2013-08-26 4 views
12

私は問題に追いついた - 私は.jarファイルを65k以上のエントリで作成すると、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のバリエーションです:


FWIW、ZIP64フォーマットのJARファイルのjavacの取り扱いにバグもあります。それはいくつかの問題を修正したかもしれませんが、それは他の改善のために遅れている可能性があります。 )最初にJARにいくつかのファイルを置かないことをお勧めします; –

+1

@PeterLawrey - はい、いくつかの小さな.jarファイル間のものを分割することは明らかな回避策ですが、非常に厄介です。とにかく、ファイルの量にそのような下限を持つことは普通ではありません。多分これについてすでにバグが開いているのでしょうか? – Rogach

+0

私はそうしたいと思いますが、見つけられない場合は、いつでも別のログに記録することができます。 –

答えて

13

どうしてですか?

これは、Java 1.7.0のバグ(別名Javaの7)

Java 1.7.0 p40以降で修正されています。

修正方法はありますか?

このバグレポートによれば、回避策(Java 1.7.0)は-jarオプションを使用せずにアプリケーションを起動することです。

+0

実行可能ファイルを作成するとアセンブラjarと残念なことに、番号ファイルが64K以上になると(私に起こった)、Javaで実行できません。 –

+1

@SoumyaKanti - Java 8にアップグレードすると、例えば。 –

関連する問題