web-dev-qa-db-ja.com

java.lang.UnsupportedClassVersionError:.classファイルのバージョン番号が間違っていませんか?

私がソースからコンパイルしなければならなかったオープンソースライブラリを含めるとき、私はこのエラーを得ています。さて、Web上のすべての提案は、コードがあるバージョンでコンパイルされ、別のバージョンで実行されたことを示しています(新旧)。ただし、私のシステムにはJREのバージョンが1つしかありません。コマンドを実行すると

$ javac -version
javac 1.5.0_18

$ Java -version
Java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

そして、EclipseでJavaライブラリーのプロパティーを調べてください。私は1.5.0_18を取得しています。

したがって、クラス自体の内部で何か他のものを例外をスローしていると結論付ける必要があります。それでも可能ですか?

140
grmn.bob

私はこのようなエラーメッセージが通常正しいことを学びました。それが(あなたの心の中で)POSSIBLYが報告されているエラーが言っていることになることができなかったとき、あなたは別の領域で問題を探しに行きます...ただ数時間後に元のエラーメッセージが本当に正しかったことを見つけるために。

あなたがEclipseを使っているので、Thiloがそれを正しいと思う私があなたがこのメッセージを得ている最も可能性が高い理由はあなたのプロジェクトの1つが1.6クラスをコンパイルしているからです。 Eclipseには(javacではなく)独自のコンパイラがあり、1.6クラスをコンパイルするには1.5 JREしか必要ないため、システムに1.5 JREしかない場合でも問題ありません。それは奇妙かもしれません、そしてこれを可能にするために設定はチェックを外される必要があります、しかし私はちょうどそれをすることができました。

問題のプロジェクトについては、プロジェクトプロパティ(通常はAlt + Enter)、Javaコンパイラセクションを確認してください。これは1.6をコンパイルするように設定されたプロジェクトのイメージですが、1.5 JREしかありません。

enter image description here

184
Joshua McKinnon

完全に「クリーン」してからEclipseで再ビルドしてみましたか(Project-> Clean ...)?

コマンドラインから直接 "javac"と "Java"でコンパイルして実行できますか?それは正しく機能しますか?

プロジェクトを右クリックして[プロパティ]に移動し、次に[Javaビルドパス]に移動します。いずれかのタブに不審なエントリがありますか。これは基本的にあなたのCLASSPATHです。

Eclipseの設定では、「Java」セクションの「Installed JREs」セクションを再確認し、それが本来あるべきものと一致していることを確認してください。

古い.classファイルがどこかに存在しているか、使用しているバージョンのJavaでコンパイル時と実行時の不一致が発生しています。

9

Eclipseでコンパイルしましたか? (javacではなく)別のコンパイラを使用しています。 (すべてが正しく設定されていれば)このエラーにはならないはずですが、代わりにjavacでコンパイルしてみてください。

それでも問題が解決する場合は、Eclipseに誤ったコンパイラ設定があるかどうかを確認してください。特にJava 5をターゲットにしてください。

5
Thilo

私も同じエラーを受けました。その理由は、Mavenを使用してプロジェクトをコンパイルしていたためです。私はJava_HOMEがJDK 7を指していたので、Java 1.7がコンパイルに使用されていて、プロジェクトの実行時にはJDK 1.5を使用していました。スクリーンショットのように.classpathファイルの以下のエントリを変更するか、Eclipseを変更すると問題は解決しました。

classpathentry kind="con" path="org.Eclipse.jdt.launching.JRE_CONTAINER/org.Eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

またはEclipseの実行設定を のように変更します。enter image description here

2
Vikky

より高いバージョンのJava用にコンパイルされたプロジェクト内のjarファイルも確認してください。これらがあなた自身のライブラリの場合、target version属性をjavacに変更することでこれを修正できます

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">
1
Jeshurun

明らかなことも常に確認してください。誤ってサーバーの追加および削除アクションのために誤ったリソースをつかんだときに、このエラーが発生しました。見逃しやすいかもしれません。

0
James Drinkard

プロジェクトフォルダからプロジェクト固有の設定ファイル(Eclipseワークスペース/プロジェクトフォルダ/ .settings /)を削除することもできます。明らかに、削除した後にプロジェクトをクリーンにしてビルドする必要があります。

0
user3471219

私はサーバーに必要なjreを変更することでこの問題を解決しました(私の場合はTomcatです)。 Eclipseの「サーバー」タブで、サーバーをダブルクリックし(サーバー構成のページを開くため)、「実行時環境」をクリックしてから、必要なJREを変更します。

0
ocrampico

java 1.7を使用するようにプロジェクトを変更する:これを機能させるには、次の手順に従います。

  • コンパイラコンプライアンスレベルの変更
  • プロジェクトのJRE/JDKを同じレベル(私の場合は1.7)に変更します。
  • 自分のプロジェクトで参照されているすべてのプロジェクトで同じ変更を行います。
  • 実行/デバッグ構成をJRE/JDK(または同じレベル)を使用するように変更します。

動作していませんか?

  • プロジェクトのBinディレクトリを削除します
  • クリーン
  • 再構築

まだ動かない?

プロジェクトのディレクトリに移動します。settings/org.Eclipse.jdt.core.prefsを編集し、ターゲットレベルが適用されていることを確認します。

がんばろう!

0
Li3ro

これが発生する可能性があるもう1つのシナリオは、Host Eclipseから(デバッグなどのために)Eclipseのインスタンスを起動しているときです。重要なのは、ターゲットのEclipse環境を起動するために使用されるJREです。

0
Jay