web-dev-qa-db-ja.com

Java 1.8 ASM ClassReaderはクラスファイルの解析に失敗しました-おそらくまだサポートされていない新しいJavaクラスファイルバージョンが原因です

私のWebアプリケーションはJDK 1.7では正常に動作しますが、Jetty 8でのアプリケーションサーバーの起動中に、次の例外で1.8でクラッシュします。 Springバージョン3.2.5.RELEASEを使用しています。

例外:

org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet

この問題は、springとそれが依存する「asm.jar」ライブラリが原因で発生すると想定しています。

どうすれば解決できますか?

77

@prungeと@Pablo Lozanoが述べたように、コードをJava 8(--target 1.8)にコンパイルする場合はSpring 4が必要ですが、Java 8コンパイル済みでアプリを実行できますSpring 3.2.Xで実行する場合はJava 7に。

チェックアウト http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.html

Java 8バイトコードレベル(-source 1.8で必要な-target 1.8)は、Spring Framework 4.0以降でのみ完全にサポートされることに注意してください。特に、Spring 3.2ベースのアプリケーションは、Java 8ランタイムにデプロイされた場合でも、ターゲットとして最大Java 7でコンパイルする必要があります。 Java 8ベースのアプリケーションの場合は、Spring 4にアップグレードしてください。

110

-target 1.7でコンパイルしてもこのエラーが発生する場合、これは、ASMクラスリーダーがjdkクラス(Java。*またはjavax。*)をロードするSpring Frameworkのバグが原因であることに注意してください。 -target 1.8でコンパイルされました。

これは、1.8クラスファイルの解析をサポートしていないSpring 3.2.8以前の古いASMバージョンと組み合わせて、このエラーにつながる可能性があります。

この問題の詳細については、こちらをご覧ください: https://jira.spring.io/browse/SPR-11719

これは、まもなくリリースされるSpring Frameworkバージョン3.2.9で修正される予定です。

もちろん、Spring Framework 4にアップグレードすると、ASMの新しいバージョンが既に含まれているため、この問題も解決されます。

ただし、何らかの理由でまだバージョン4にアップグレードできない場合は、別の方法(すぐに)があることを知っておくと便利です。

65
ItayK

私も同じ問題を抱えて解決しました。 Spring 3.xでJava 8.を使用しています。上記のソリューションが機能しない場合は、jarを変更し、使用しているJavaバージョンと互換性があるかどうかを検索します。 spring 3.xはJava 8と互換性がありません。

0
rohan

Java 8または次のバージョンを使用する場合、Springバージョンをアップグレードする必要があり、Springバージョンは4.xxxである必要があります

0
Shafaet Hossain