java - ASM ClassReader 无法解析类文件 - 可能是由于不支持新的 Java 类文件版本 - 我正在使用 Apache 7 和 JDK 1.8

标签 java spring-mvc

我收到以下错误 **ASM ClassReader 无法解析类文件 - 可能是由于尚不支持的新 Java 类文件版本 **

我正在使用 JDK 1.8 和 Apache 7 并使用 Spring 3.2.9 版本来运行我的 Web 项目

[jar:file:/apps/tomcat/instances/tomcat01/work/Catalina/localhost/ConcurArchival_Web/WEB-INF/lib/ecl-test-1.0.0.jar!/com/tgt/ecl/framework/test/MVCTest.class]; nested exception is 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: URL 

感谢退伍军人的帮助

堆栈跟踪添加如下:

 SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/apps/tomcat/instances/tomcat01/work/Catalina/localhost/ConcurArchival_Web/WEB-INF/lib/tgt-ecl-test-1.0.0.jar!/com/tgt/ecl/framework/test/MVCTest.class]; nested exception is 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: URL [jar:file:/apps/tomcat/instances/tomcat01/work/Catalina/localhost/ConcurArchival_Web/WEB-INF/lib/tgt-ecl-test-1.0.0.jar!/com/tgt/ecl/framework/test/MVCTest.class]; nested exception is java.lang.IllegalArgumentException
       at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:290)
       at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
       at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
       at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
       at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438)
       at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)
       at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:195)
       at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)
       at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108)
       at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
       at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
       at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
       at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
       at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
       at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
       at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
       at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
       at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
       at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
       at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
       at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
       at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
       at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
       at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
       at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
       at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
       at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
       at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
       at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
       at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:663)
       at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1642)
       at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
       at java.util.concurrent.FutureTask.run(Unknown Source)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
       at java.lang.Thread.run(Unknown Source)
Caused by: 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: URL [jar:file:/apps/tomcat/instances/tomcat01/work/Catalina/localhost/ConcurArchival_Web/WEB-INF/lib/tgt-ecl-test-1.0.0.jar!/com/tgt/ecl/framework/test/MVCTest.class]; nested exception is java.lang.IllegalArgumentException
       at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:56)
       at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
       at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)
       at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:266)
       ... 36 more
Caused by: java.lang.IllegalArgumentException
       at org.springframework.asm.ClassReader.<init>(Unknown Source)
       at org.springframework.asm.ClassReader.<init>(Unknown Source)
       at org.springframework.asm.ClassReader.<init>(Unknown Source)
       at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:53)
       ... 39 more

Apr 22, 2016 1:52:31 AM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
Apr 22, 2016 1:52:31 AM org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
       at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:171)
       at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1090)
       at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1064)
       at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)
       at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:586)
       at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
       at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4980)
       at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5626)
       at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
       at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
       at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
       at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
       at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:663)
       at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1642)
       at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
       at java.util.concurrent.FutureTask.run(Unknown Source)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
       at java.lang.Thread.run(Unknown Source)

最佳答案

您使用的 Spring 版本依赖于不支持使用 Java 8 编译器编译的代码的 ASM 版本。您需要升级到 Spring 4.0.3 或更高版本。

https://spring.io/blog/2014/03/27/spring-framework-4-0-3-released-with-java-8-support-now-production-ready

可能通过对 ASM 库进行点更新而逃脱惩罚,但这很容易在 Spring 和 ASM 之间引入兼容性问题。升级 Spring 是一个更好的主意。您将有机会使用 Spring 4.x 中的新功能,并且更容易迁移到 5.x 及更高版本。


有人建议了另一种方法:将运行时和构建平台回滚到 Java 7。这可能在短期内有效,但您只是在推迟升级....并使升级成为一个更大的问题来解决当你被迫解决这些问题。


显然,如果您混合使用 Spring 版本(可能其中一些早于 Spring 4.0.3)和 Java 8 及更高版本,您也可以获得此信息。

关于java - ASM ClassReader 无法解析类文件 - 可能是由于不支持新的 Java 类文件版本 - 我正在使用 Apache 7 和 JDK 1.8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36820068/

相关文章:

java - 我可以使用类路径覆盖正在运行的 jar 中的文件吗?

java - 我可以对函数 CURSOR 结果使用命名参数吗?

java - 在 Java 中重新安排计时器

java - Tomcat监听器启动报错

java - spring thymeleaf 静态内容 HTTP 405

java - 每个用户的 Spring RabbitMQ 连接

java - 在半透明 Swing 窗口内创建 jtable

java - Infinispan 中的分组 api

spring-mvc - web.xml 错误页面位置重定向未经过我的过滤器定义

java - 并行多个步骤的Spring批处理分区?