Java 1.8 ASM ClassReader가 클래스 파일을 구문 분석하지 못했습니다. 아직 지원되지 않는 새 Java 클래스 파일 버전 때문일 수 있습니다.


88

내 웹 응용 프로그램은 JDK 1.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"라이브러리 때문에 발생한다고 가정한다.

이 문제를 어떻게 해결합니까?


웹앱을 Java 8 또는 Java 7로 컴파일하고 있습니까? 8 경우, 자바 7 타겟팅 클래스를 컴파일하지만 여전히 자바에서 8 실행 할 수 있어야한다
prunge을

3
당신이 Java8을 대상으로 할 경우에 당신은 봄 4해야
파블로 로자노

1.7로 컴파일되지만 Java 8 기능에 대한 지원은 없습니다. 이 경우 doesen't 메이크 sence에 JDK 8을 사용
stanislav.chetvertkov

답변:


119

@prunge 및 @Pablo Lozano가 언급했듯이 코드를 Java 8 (-target 1.8)로 컴파일하려면 Spring 4가 필요하지만 Spring 3.2.X에서 실행하는 경우 Java 7로 컴파일 된 Java 8에서 앱을 실행할 수 있습니다.

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.html 확인

Java 8 바이트 코드 레벨 (-target 1.8, -source 1.8에서 필요)은 Spring Framework 4.0에서만 완전히 지원됩니다. 특히 Spring 3.2 기반 애플리케이션은 Java 8 런타임에 배포 되더라도 최대 Java 7을 대상으로 컴파일해야합니다. Java 8 기반 애플리케이션을 위해 Spring 4로 업그레이드하십시오.


고마워요! 어떤 이유로 나는 스프링 (4) 릴리스 :-)보고 싶었어
stanislav.chetvertkov

2
이것은 나에게도 발생합니다. 코드가 여전히 1.7을 대상으로 컴파일되었지만 런타임을 Java 8로 변경했습니다. 아이디어가 있습니까?
orrsella 2014-04-24

1
ItayK의 답변을 참조하십시오. 봄 3.2.8 이하에는 올바른 asm 버전을 사용하지 않는 버그가 있습니다. 3.2.9에서 수정되었습니다.
chrismarx

2
3.2.10에서 수정 된 또 다른 버그가 있었으므로 3.2.16 또는 최신 버전을 사용하는 것이 좋습니다. 수정 된 주요 Spring 버그는 다음과 같습니다. 메타 데이터 읽기는 java. * 및 javax. * 유형 (특히 JDK 8에서)에 대해 ASM을 사용해서는 안됩니다. 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

67

-target 1.7로 컴파일해도이 오류가 발생하는 경우 ASM 클래스 리더가 jdk 클래스 (java. * 또는 javax. *)를로드하게하는 Spring Framework의 버그 때문입니다. -target 1.8로 컴파일되었습니다.

1.8 클래스 파일의 구문 분석을 지원하지 않는 스프링 3.2.8 이하의 이전 ASM 버전과 결합 되어도이 오류가 발생할 수 있습니다.

문제에 대한 자세한 정보는 https://jira.spring.io/browse/SPR-11719 에서 찾을 수 있습니다.

이는 곧 출시 될 Spring Framework 버전 3.2.9에서 수정되어야합니다.

물론 Spring Framework 4로 업그레이드하면 ASM의 최신 버전이 이미 포함되어 있으므로 문제가 해결됩니다.

그러나 어떤 이유로 아직 버전 4로 업그레이드 할 수없는 경우 대안이 있음을 아는 것이 좋습니다 (곧).


6
Spring 3.2.9로 업그레이드하는 것이 도움이되었습니다.
Cengiz 2015.04.09

2
이것은 문제가 무엇인지 명확하게 설명하기 때문에 받아 들여지는 대답이어야합니다
Willa

2
이 문제가 Spring 3.2.5에서 3.2.9로 변경되고 문제가 해결되었습니다. 완벽한 대답입니다.
Salvatorelab

휴, Spring 4로 업그레이드 할 필요가 없어서 다행입니다. Great Answer!
rudolfson

0

Java 8 또는 다음 버전을 사용하는 경우 스프링 버전을 업그레이드해야하며 스프링 버전은 4.xxx 여야합니다.


0

나는 같은 문제가 있었고 그것을 해결했습니다. Java 8과 함께 spring 3.x를 사용하고 있습니다. 위의 솔루션이 작동하지 않으면 jar를 변경하고 해당 jar가 사용중인 Java 버전과 호환되는지 여부를 검색합니다. 스프링 3.x는 Java 8과 호환되지 않습니다.


0

이 문제를 해결하기 위해 Java 8에 Spring 4를 사용할 수 있습니다. 방금 테스트했고 작동합니다. 이 문제는 Spring 3.2.9-RELEASE 버전부터 수정되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.