Eclipse で大規模なオープン ソース プロジェクトを構築しようとしています。Maven を使用しているため、さまざまなプラグイン (m2eclipse など) をインストールしましたが、このセットアップには少し慣れていません。
関心のある特定の JAR を問題なくビルドして実行できます。ただし、新しく構築された JAR が大きな ZIP ファイルを開こうとすると、次のようになります。
Exception in thread "main" java.lang.RuntimeException: java.util.zip.ZipException: invalid CEN header (bad sig
nature)
at org.opentripplanner.graph_builder.impl.GtfsGraphBuilderImpl.buildGraph(GtfsGraphBuilderImpl.java:17
9)
at org.opentripplanner.graph_builder.GraphBuilderTask.run(GraphBuilderTask.java:127)
at org.opentripplanner.graph_builder.GraphBuilderMain.main(GraphBuilderMain.java:51)
Caused by: java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(Unknown Source)
調査を行ったところ、このエラーは、ファイルが ZIP64 形式であるため、java.util.ZipFile がファイルを読み取れないことを意味しているようです。どうやらこれは Java 1.7 で修正されたようで、OS X の JDK を忠実に更新し、Eclipse で右クリックして Maven プロジェクトを変更しようとした後、プロジェクト ファセットを変更しました。そのプロジェクトの JRE ライブラリを 1.7 に:
ただし、これは機能しません。プロジェクト全体を再構築してもエラーが発生します。
古い java.util.zip がまだどこかから取り込まれている可能性はありますか? Java でリンクがどのように機能するかについてあまり詳しくありません。依存関係内にこのように古い JDK を「埋め込む」ことはできますか? それとも、ターゲットマシン上にある java.util.zip が使用されるだけですか? (これは間違いなく JRE 1.7 です) 例外をスローするコードは、実際には Maven の依存関係として取り込まれた別の JAR に含まれていることを知っています。
Java 1.7 に対してこの外部 JAR を追跡して再構築する必要がありますか? それが問題なのですか? または、新しい JRE 1.7 を 1.6 に戻す Maven の「親プロジェクト」の概念はありますか? これらの質問が単純である場合は申し訳ありません。
私は当初、ランタイム マシンで JRE を更新するだけで済むと思っていましたが、明らかにそうではありませんでした。では、このエラーを解決するにはどうすればよいですか?