Java 1.8 ASM ClassReader, muhtemelen henüz desteklenmeyen yeni bir Java sınıfı dosya sürümü nedeniyle sınıf dosyasını ayrıştıramadı


88

Web uygulamam JDK 1.7'de sorunsuz çalışıyor ancak 1.8'de aşağıdaki istisna dışında çöküyor (Jetty 8 ile uygulama sunucusu başlatılırken). Bahar sürümünü kullanıyorum: 3.2.5.RELEASE.

İstisna:

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

Sorunun bağlı olduğu yay ve "asm.jar" kütüphanesi nedeniyle oluştuğunu varsayıyorum.

Bunu nasıl çözerim?


Web uygulamanızı Java 8 veya Java 7 olarak mı derliyorsunuz? 8 ise, sınıflarınızı Java 7'yi hedefleyerek derlemeniz mümkün olmalı, ancak yine de Java 8 altında çalıştırılmalıdır.
2014

3
Java8'i hedeflemek istiyorsanız, Spring 4'e ihtiyacınız olacak
Pablo Lozano

1.7'ye derlenir, ancak java 8 özellikleri için destek yoktur. Yani bu durumda jdk 8 kullanmak bir anlam ifade etmiyor
stanislav.chetvertkov

Yanıtlar:


119

@Prunge ve @Pablo Lozano'nun belirttiği gibi, kodu Java 8 (--target 1.8) için derlemek istiyorsanız Spring 4'e ihtiyacınız var, ancak Spring 3.2.X'te çalıştırırsanız Java 7'ye derlenmiş Java 8'de uygulamaları çalıştırabilirsiniz.

Check out http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.html

Java 8 bayt kodu seviyesinin (-kaynak 1.8'in gerektirdiği şekilde -hedef 1.8) yalnızca Spring Framework 4.0'dan itibaren tam olarak desteklendiğini unutmayın. Özellikle, Spring 3.2 tabanlı uygulamaların, bir Java 8 çalışma zamanına yerleştirilmiş olsalar bile, hedef olarak maksimum Java 7 ile derlenmesi gerekir. Lütfen Java 8 tabanlı uygulamalar için Spring 4'e yükseltin.


İşe yaradı, teşekkürler! Nedense 4. bahar yayınını kaçırdım :-)
stanislav.chetvertkov

2
Bu benim de başıma geliyor, kod hala 1.7 hedefine göre derlenmiş olsa da, çalışma zamanını yalnızca java 8 olarak değiştirdim.
orrsella

1
ItayK'ın cevabına bakın, 3.2.8 ve altında ilkbaharda doğru asm sürümünü kullanmayan bir hata var, 3.2.9'da düzeltildi
chrismarx

2
3.2.10'da düzeltilen başka bir hata daha vardı, bu yüzden 3.2.16 veya en son ne ise onu tavsiye ederim. Düzeltilen temel Spring hataları şunlardır: Meta veri okuması asla java. * Ve javax. * Türleri için ASM kullanmamalıdır (özellikle JDK 8'de) Java 8: arayüzlerde INVOKESPECIAL / STATIC ayrıştırması için gereken ASM5 ziyaretçileri
michaelok,

Teşekkürler, <groupId> org.apache.maven.plugins </groupId> <artifactId> maven-compiler-plugin </artifactId> <configuration> <source> 1.7 </source> <target> 1.7 </ <groupId> org.apache.maven.plugins yerine hedef> </configuration> </groupId> <artifactId> maven-compiler-plugin </artifactId> <configuration> <source> 1.8 </source> <target> 1.8 < / target> </configuration>
Ashutosh S

67

-Target 1.7 ile derleseniz bile bu hatayla karşılaşırsanız, bunun Spring Framework'teki ASM sınıf okuyucusunun jdk sınıflarını (java. * Veya javax. *) Yüklemesine neden olan bir hatadan kaynaklandığını lütfen unutmayın. -target 1.8 ile derlenmiştir.

Bu, 1.8 sınıfı dosyaların ayrıştırılmasını desteklemeyen 3.2.8 ve altındaki yaydaki eski ASM sürümüyle birlikte bu hataya da yol açabilir.

Sorunla ilgili daha fazla bilgiyi burada bulabilirsiniz: https://jira.spring.io/browse/SPR-11719

Bu, yakında piyasaya sürülecek olan Spring Framework sürüm 3.2.9'da düzeltilmelidir.

Elbette, daha yeni bir ASM sürümü içerdiği için Spring Framework 4'e yükseltme de sorunu çözecektir.

Ancak, herhangi bir nedenle henüz 4 sürümüne yükseltemiyorsanız, bir alternatifin (yakında) olduğunu bilmek iyidir.


6
Bahar 3.2.9'a yükseltmek bana yardımcı oldu.
Cengiz

2
Kabul edilen cevap bu olmalı çünkü sorunun ne olduğunu açıkça açıklıyor
Willa

2
Spring 3.2.5 ile bu problem vardı, 3.2.9 olarak değiştirildi ve problem çözüldü. Mükemmel cevap.
Salvatorelab

Vay be, sevindim Bahar 4'e yükseltmem gerekmedi. Harika Cevap!
rudolfson

0

java 8 veya sonraki sürümü kullanıyorsanız, yay sürümünü yükseltmeniz gerekir ve yay sürümü 4.xxx olmalıdır


0

Aynı sorunu yaşadım ve çözdüm. Spring 3.x'i java 8 ile kullanıyorum. Yukarıdaki çözümler çalışmıyorsa kavanozları değiştirin ve bu kavanozların kullandığınız java sürümüyle uyumlu olup olmadığını araştırın. spring 3.x, java 8 ile uyumlu değildir.


0

Spring 4, bu sorunu çözmek için java 8 için kullanılabilir. Sadece test ettim ve işe yarıyor. Bu sorun Spring 3.2.9-RELEASE sürümünden itibaren düzeltilmiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.