Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file
-
学习SpringMVC
运行环境
-
jdk版本:jdk-16.0.2
-
Idea版本:2021.2
-
电脑系统:win10
环境搭建
-
创建Maven项目。点击Maven项目创建时候的
create from archetype
,选择Maven里面的模板即可,选择org.apache.maven.archetypes:maven-archetype-webapp
; -
因为创建的目录结构不全,所以我们需要手动补全java文件夹。点击
file
-->Project Structure
-->Moudles
,在Moudles中选择刚刚创建的项目,看看src文件夹下面的main文件夹下面是否存在java文件夹。如果没有则需要手动添加:右键main文件夹,选择new folder,在出现的方框中输入java。就会创建一个java文件夹。
-
将pom.xml中多余的内容删除掉,再添加SpringMVC需要的依赖。在
pom.xml
文件中添加SpringMVC所需要的jar包以及Tomcat运行所需要的插件,最后pom.xml文件内容如下:12345678910111213141516171819202122232425262728293031323334353637383940<?
xml
version="1.0" encoding="UTF-8"?>
<
project
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<
modelVersion
>4.0.0</
modelVersion
>
<
groupId
>com.linxuan</
groupId
>
<
artifactId
>springmvc01</
artifactId
>
<
version
>1.0-SNAPSHOT</
version
>
<
packaging
>war</
packaging
>
<
dependencies
>
<
dependency
>
<
groupId
>javax.servlet</
groupId
>
<
artifactId
>javax.servlet-api</
artifactId
>
<
version
>3.1.0</
version
>
<
scope
>provided</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework</
groupId
>
<
artifactId
>spring-webmvc</
artifactId
>
<
version
>5.2.10.RELEASE</
version
>
</
dependency
>
</
dependencies
>
<
build
>
<
plugins
>
<!--用来快速部署并启动Maven项目,tomcat7-maven-plugin是maven中集成tomcat容器的一个插件-->
<
plugin
>
<
groupId
>org.apache.tomcat.maven</
groupId
>
<
artifactId
>tomcat7-maven-plugin</
artifactId
>
<
version
>2.1</
version
>
<
configuration
>
<
port
>80</
port
>
<
path
>/</
path
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
</
project
>
-
创建配置类
123456789package
com.linxuan.config;
import
org.springframework.context.annotation.ComponentScan;
import
org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
(
"com.linxuan.controller"
)
public
class
SpringMvcConfig {
}
-
创建Controller类
1234567891011121314151617package
com.linxuan.controller;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.ResponseBody;
@Controller
public
class
UserController {
@RequestMapping
(
"/save"
)
// 设置返回数据为json
@ResponseBody
public
String save() {
System.out.println(
"user save..."
);
return
"{'info':'springmvc'}"
;
}
}
-
使用配置类替换
web.xml
。将web.xml
删除,换成ServletContainersInitConfig
1234567891011121314151617181920212223242526package
com.linxuan.config;
import
org.springframework.web.context.WebApplicationContext;
import
org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import
org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public
class
ServletContainersInitConfig
extends
AbstractDispatcherServletInitializer {
//加载springmvc配置类
protected
WebApplicationContext createServletApplicationContext() {
//初始化WebApplicationContext对象
AnnotationConfigWebApplicationContext ctx =
new
AnnotationConfigWebApplicationContext();
//加载指定配置类
ctx.register(SpringMvcConfig.
class
);
return
ctx;
}
//设置由springmvc控制器处理的请求映射路径
protected
String[] getServletMappings() {
return
new
String[]{
"/"
};
}
//加载spring配置类
protected
WebApplicationContext createRootApplicationContext() {
return
null
;
}
}
-
配置Tomcat
-
运行发现报错
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118org.springframework.beans.factory.BeanDefinitionStoreException: Failed to
read
candidate component class:
file
[D:\Java\IdeaProjects\ssm\springmvc01\target\classes\com\linxuan\controller\UserController.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:
file
[D:\Java\IdeaProjects\ssm\springmvc01\target\classes\com\linxuan\controller\UserController.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class
file
major version 60
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:452)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:315)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:276)
at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:319)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:702)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:578)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:530)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.base
/java
.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base
/java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base
/java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base
/java
.lang.Thread.run(Thread.java:831)
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:
file
[D:\Java\IdeaProjects\ssm\springmvc01\target\classes\com\linxuan\controller\UserController.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class
file
major version 60
at org.springframework.core.
type
.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:60)
at org.springframework.core.
type
.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:49)
at org.springframework.core.
type
.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103)
at org.springframework.core.
type
.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:429)
... 29
more
Caused by: java.lang.IllegalArgumentException: Unsupported class
file
major version 60
at org.springframework.asm.ClassReader.<init>(ClassReader.java:196)
at org.springframework.asm.ClassReader.<init>(ClassReader.java:177)
at org.springframework.asm.ClassReader.<init>(ClassReader.java:163)
at org.springframework.asm.ClassReader.<init>(ClassReader.java:284)
at org.springframework.core.
type
.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:57)
... 33
more
5月 16, 2022 10:53:41 下午 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet threw load() exception
java.lang.IllegalArgumentException: Unsupported class
file
major version 60
at org.springframework.asm.ClassReader.<init>(ClassReader.java:196)
at org.springframework.asm.ClassReader.<init>(ClassReader.java:177)
at org.springframework.asm.ClassReader.<init>(ClassReader.java:163)
at org.springframework.asm.ClassReader.<init>(ClassReader.java:284)
at org.springframework.core.
type
.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:57)
at org.springframework.core.
type
.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:49)
at org.springframework.core.
type
.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103)
at org.springframework.core.
type
.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:429)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:315)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:276)
at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:319)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:702)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:578)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:530)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.base
/java
.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base
/java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base
/java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base
/java
.lang.Thread.run(Thread.java:831)
5月 16, 2022 10:53:41 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler [
"http-bio-80"
]
ERROR: IllegalAccessException
for
stop method
in
class org.apache.tomcat.maven.plugin.tomcat7.run.ExtendedTomcat
java.lang.reflect.InvocationTargetException
at java.base
/jdk
.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base
/jdk
.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base
/jdk
.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base
/java
.lang.reflect.Method.invoke(Method.java:567)
at org.apache.tomcat.maven.common.run.EmbeddedRegistry.shutdownAll(EmbeddedRegistry.java:110)
at org.apache.tomcat.maven.common.run.EmbeddedRegistry$1.run(EmbeddedRegistry.java:69)
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardServer[-1]]
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:345)
... 6
more
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardService[Tomcat]]
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:753)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
... 7
more
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Tomcat]]
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:502)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
... 9
more
Caused by: org.apache.catalina.LifecycleException: A child container failed during stop
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:1186)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
... 11
more
Process finished with
exit
code 130
问题补救
-
尝试将jdk版本降至1.8,将下面代码加入pom.xml文件中
12345678910111213<
build
>
<
plugins
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-compiler-plugin</
artifactId
>
<
version
>2.3.2</
version
>
<
configuration
>
<
source
>1.8</
source
>
<
target
>1.8</
target
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
结果:没有任何作用,还是显示上述报错信息。
-
不用Tomcat7插件,用电脑下载的Tomcat,我这里电脑本地下载的Tomcat版本为8.5.75。
现在pom.xml文件内容如下
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152<?
xml
version="1.0" encoding="UTF-8"?>
<
project
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<
modelVersion
>4.0.0</
modelVersion
>
<
groupId
>com.linxuan</
groupId
>
<
artifactId
>springmvc01</
artifactId
>
<
version
>1.0-SNAPSHOT</
version
>
<
packaging
>war</
packaging
>
<
dependencies
>
<
dependency
>
<
groupId
>javax.servlet</
groupId
>
<
artifactId
>javax.servlet-api</
artifactId
>
<
version
>3.1.0</
version
>
<
scope
>provided</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>org.springframework</
groupId
>
<
artifactId
>spring-webmvc</
artifactId
>
<
version
>5.2.10.RELEASE</
version
>
</
dependency
>
</
dependencies
>
<
build
>
<!--插件-->
<
plugins
>
<!--用来快速部署并启动Maven项目,tomcat7-maven-plugin是maven中集成tomcat容器的一个插件-->
<
plugin
>
<
groupId
>org.apache.tomcat.maven</
groupId
>
<
artifactId
>tomcat7-maven-plugin</
artifactId
>
<
version
>2.1</
version
>
<
configuration
>
<
port
>80</
port
>
<
path
>/</
path
>
</
configuration
>
</
plugin
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-compiler-plugin</
artifactId
>
<
version
>2.3.2</
version
>
<
configuration
>
<
source
>1.8</
source
>
<
target
>1.8</
target
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
</
project
>
-
将上述的插件注释掉,然后使用电脑本地下载的Tomcat运行,结果发现报错
123错误: 不支持发行版本 5
Language level is invalid or missing
in
pom.xml. Current project JDK is 16. Specify language level
in
springmvc01
查看,果然jdk版本莫名的变成了1.5
我们再使用插件将jdk升至1.8,将下述内容加至pom.xml文件中。
1234567891011121314<
build
>
<!--插件-->
<
plugins
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-compiler-plugin</
artifactId
>
<
version
>2.3.2</
version
>
<
configuration
>
<
source
>1.8</
source
>
<
target
>1.8</
target
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
-
再运行,依然发现报错,报错信息如下
1Caused by: java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。
我们导入的spring_web jar包重复了,所以需要删除一个
-
再点击运行,就可以了。总的来说也就是版本不匹配的问题,多调一下版本就可以了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)