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


87

私のWebアプリケーションはJDK1.7で正常に動作しますが、次の例外を除いて1.8でクラッシュします(Jetty 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

春とそれが依存する「asm.jar」ライブラリが原因で問題が発生すると思います。

これを解決するにはどうすればよいですか?


WebアプリをJava8またはJava7としてコンパイルしていますか?8場合、Java 7をターゲットに、あなたのクラスをコンパイルそれでもJavaの8の下でそれを実行することは可能でなければなりません
prunge

3
Java8をターゲットにする場合は、Spring 4
Pablo Lozano

1.7にコンパイルされますが、Java8機能はサポートされていません。したがって、この場合にjdk 8を使用しても意味がありません
stanislav.chetvertkov

回答:


119

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

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.htmlをチェックしてください

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


うまくいきました、ありがとう!どういうわけか私は春の4リリースを逃しました:
stanislav.chetvertkov

2
これは私にも起こります。コードはまだターゲット1.7にコンパイルされていますが、ランタイムをjava 8に変更しただけです。何かアイデアはありますか?
orrsella 2014

1
参照ItayKの答えは、それは3.2.9-に固定しています、右のasmバージョンを使用することはありません春3.2.8で、以下のバグがある
chrismarx

2
3.2.10で修正された別のバグがあったので、3.2.16または最新のものを使用することをお勧めします。修正されたSpringの主なバグは次のとおりです。メタデータの読み取りでは、java。*およびjavax。*タイプにASMを使用しないでください(特にJDK 8) Java 8:インターフェイスでINVOKESPECIAL / STATICを解析するために必要なASM5訪問者
michaelok

おかげで、<groupId> org.apache.maven.plugins </ groupId> <artifactId> maven-compiler-plugin </ artifactId> <configuration> <source> 1.7 </ source> <target> 1.7 </ <groupId> org.apache.maven.plugins </ groupId> <artifactId> maven-compiler-plugin </ artifactId> <configuration> <source> 1.8 </ source> <target> 1.8 <の代わりにtarget> </ configuration> / target> </ configuration>
Ashutosh S 2017

67

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

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

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

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

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

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


6
Spring3.2.9にアップグレードすることは私を助けました。
Cengiz 2015

2
問題が何であるかを明確に説明しているため、これは受け入れられた答えであるはずです
Willa 2016年

2
Spring 3.2.5でこの問題が発生し、3.2.9に変更され、問題が解決されました。完璧な答え。
Salvatorelab

ふぅ、Spring4にアップグレードする必要がなかったのはうれしい。素晴らしい答えだ!
ルドルフソン2016年

0

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


0

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


0

この問題を解決するために、Spring4をJava8に使用できます。私はそれをテストしたところ、動作します。この問題は、Spring3.2.9-RELEASEバージョン以降で修正されています。

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