Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file

发生缘由

  • 学习SpringMVC

运行环境

  • jdk版本:jdk-16.0.2

  • Idea版本:2021.2

  • 电脑系统:win10

环境搭建

  1. 创建Maven项目。点击Maven项目创建时候的create from archetype,选择Maven里面的模板即可,选择org.apache.maven.archetypes:maven-archetype-webapp

  2. 因为创建的目录结构不全,所以我们需要手动补全java文件夹。点击file-->Project Structure-->Moudles,在Moudles中选择刚刚创建的项目,看看src文件夹下面的main文件夹下面是否存在java文件夹。

    如果没有则需要手动添加:右键main文件夹,选择new folder,在出现的方框中输入java。就会创建一个java文件夹。

  3. 将pom.xml中多余的内容删除掉,再添加SpringMVC需要的依赖。在pom.xml文件中添加SpringMVC所需要的jar包以及Tomcat运行所需要的插件,最后pom.xml文件内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?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>
  4. 创建配置类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    package com.linxuan.config;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    @ComponentScan("com.linxuan.controller")
    public class SpringMvcConfig {
    }
  5. 创建Controller类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package 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'}";
        }
    }
  6. 使用配置类替换web.xml。将web.xml删除,换成ServletContainersInitConfig

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package 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;
        }
    }
  7. 配置Tomcat

  8. 运行发现报错

问题补救

  • 尝试将jdk版本降至1.8,将下面代码加入pom.xml文件中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <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文件内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?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运行,结果发现报错

    1
    2
    3
    错误: 不支持发行版本 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文件中。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <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>
  • 再运行,依然发现报错,报错信息如下

    1
    Caused by: java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。

    我们导入的spring_web jar包重复了,所以需要删除一个

  • 再点击运行,就可以了。总的来说也就是版本不匹配的问题,多调一下版本就可以了。

posted @   炸天帮帮主  阅读(406)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示