0

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 を更新するだけで済むと思っていましたが、明らかにそうではありませんでした。では、このエラーを解決するにはどうすればよいですか?

4

3 に答える 3

2

問題が実際に古いバージョンの Java を使用していることが原因であると仮定すると、再構築しても何の違いもありません。本当の問題は、アプリケーションの JAR が古い JREで実行されていることです。

アプリケーションの実行に使用しているコマンド シェルで、 を実行しますjava -version。これにより、実行時にどのJDK / JREが使用されるかがわかりますjava -jar yourApp.jar ...

于 2013-04-16T12:59:17.570 に答える
0

Maven との関係で最も重要な点は、真実のソースは Maven の pom ファイルであり、もはや IDEではないことに注意してください。したがって、コンパイラのバージョンの変更は、IDE ではなくpom.xmlファイルで行う必要があります。

于 2013-04-16T12:50:11.710 に答える