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


140

ソースからコンパイルしなければならないオープンソースライブラリを含めると、このエラーが発生します。現在、Web上のすべての提案は、コードが1つのバージョンでコンパイルされ、別のバージョン(新旧)で実行されたことを示しています。ただし、システムに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

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


2
最初にクラスパスにある可能性のあるコンパイルされたバージョンのライブラリがありますか?
Jeff Storey、2010年

いい考えですが、違います。'findを使用してチェックを行いました。-name '* .jar' | xargs Locate」は、JARを含むlibフォルダーから取得します。さらに、EclipseがCLASSPATHを使用しているとは思いませんでしたか?他に良い提案はありますか?
grmn.bob 2010年

jre srcコードを再構築するために、cmdでこのfind -name '* .jar'コマンドを使用する方法...そしてそのために、このcmdを起動する必要があります..... javalobby.org/java/forums /t103334.html .....私の jdkはC:\ Program Files \ Java \ jdk1.6.0_31にあります
Learner

回答:


185

このようなエラーメッセージは通常正しいことを学びました。報告されているエラーが(心の中で)予測できない場合は、別の領域の問題を探しに行きます...元のエラーメッセージが本当に正しいことを数時間後に確認するだけです。

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

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

ここに画像の説明を入力してください


完全に同意します...そのため、コメントで、特定する方法を尋ねました。私はEclipseの内部クラスを知りませんでした。ライブラリは「javac」を使用してコマンドラインでコンパイルされ、私のEclipseプロジェクトに統合されました。コマンドラインからプロジェクトをコンパイルしてみます。あなたは明らかに過去にこの問題を解決しており、あなたの提案は素晴らしいです。
grmn.bob 2010年

3
JDK(ソースがある)を持っている場合は、Eclipseにいくつかのブレークポイントを追加し、うまくいけば、ロードしようとしているクラスを確認できるはずです。最も簡単な方法は、おそらくUnsupportedClassVersionErrorのコンストラクター内のブレークポイント(またはEclipse例外ブレークポイント、「J!」アイコン)であり、その方法を調べることができます。
Joshua McKinnon

OK。建物の専門家を見つけたところ、彼はEclipseに私のコマンドラインと同じJREを参照させることができました。その後、1.6に対して再構築し、1.6に対して実行したところ、すべて動作しています。明らかに、1.5以外は何もないのは間違いでした。彼はどこを見ればいいのか教えてくれました。助けてくれてありがとう-今、私は次の問題に取り掛かっています!:)
grmn.bob

2
同じ問題がありました。私が犯した間違いは、1.5 JREと1.6コンパイラを使用していたことです。サポートされていないclassversionエラーは解決されませんでした。そこで、Eclipseに1.6 JREをインストールし、1.6コンパイラーを使用しました。その後、すべてが正常に動作し始めました。
Vanchinathan Chandrasekaran

1
私がこの問題に出会い、検索し、この答えを見つけたのは2回目なので、これをもう一度賛成したいと思います。> _ <
AlbeyAmakiir

9

完全な「クリーン」を実行してから、Eclipseで再ビルドしましたか(プロジェクト->クリーン...)?

コマンドラインから直接「javac」と「java」でコンパイルして実行できますか?それは正しく動作しますか?

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

Eclipse設定で、「Java」セクションの「Installed JREs」セクションを再確認し、それが想定どおりであることを確認することもできます。

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


はい(完全にクリーン); 試していない(cmd行からのプロジェクト); 多分/いいえ(Eclipse「Java Build Path」からエントリを削除しました)。それをしました(JRE-私がバージョンを取得した場所です#)。
grmn.bob 2010年

5

Eclipseでコンパイルしましたか?別のコンパイラ(javacではない)を使用します。これでこのエラーは発生しないはずです(すべてが適切に構成されている場合)が、代わりにjavacでコンパイルしてみてください。

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


それが私が学んでいることです。同じ方法で2つの部分を構築してみましょう(コマンドラインまたは日食、あるいはその両方)。
grmn.bob 2010年

1
Thiloに感謝します。今日は、EclipseとJava、およびクラスのバージョンについて多くを学びました。そして、アリについても少し。
grmn.bob 2010年

2

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

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

または日食の実行構成を次のように変更します ここに画像の説明を入力してください


1

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

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

0

これが発生する可能性のある別のシナリオは、ホストのEclipseからEclipseのインスタンス(デバッグなど)を起動する場合です。その場合、プロジェクトのレベルまたはプロジェクトのクラスパス上のJREライブラリを変更するだけでは効果がありません。重要なのは、ターゲットのEclipse環境を起動するために使用されるJREです。


0

常に明白なものもチェックしてください。サーバーの追加と削除のアクションで間違ったリソースを誤って取得したときに、このエラーが発生しました。見落としがちです。


0

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


0

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

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

機能していませんか?

  • プロジェクトのBinディレクトリを削除する
  • 掃除
  • 再構築

まだ動作していません?

プロジェクトのディレクトリ:.settings / org.eclipse.jdt.core.prefsを編集>ターゲットレベルが適用されていることを確認

幸運を!


0

サーバーに必要なjreを変更することでこの問題を解決しました(私の場合はtomcatです)。Eclipseの[サーバー]タブで、サーバーをダブルクリックし(サーバー構成のページを開くため)、[ランタイム環境]をクリックして、必要なJREを変更します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.