概述
今天看了springsecurity的视频学习,没有根据视频中老师的步骤搭建环境,而是自己创建了一个普通的Java项目,然后导包,搭建springboot环境,但是在实际运行项目的过程中报错了。
java.lang.NoClassDefFoundError: org/springframework/beans/factory/SmartInitializingSingleton
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_281]
at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[na:1.8.0_281]
at java.securit
..........
主要问题就是说我的这个类找不到,在网上查询了一下也是因为版本不匹配的问题!
在发生问题之前我的依赖是这样写的
# springboot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>3.0.5</version>
</dependency>
很明显,版本不匹配,但是我本地security只有3.0.5的这个版本,当时也没多想,就直接干上去了,后悔万分呀。哭唧唧。
解决方案
我的项目是使用的maven来进行依赖管理,所以只需要在maven中统一jar依赖的版本。
添加如下代码:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
</parent>
添加了这个之后,所有和springboot需要整合的其他框架,所对应的版本号都会趋于统一为匹配2.5.3版本的,不会再发生版本不匹配问题。并且我们所有和springboot需要整合的依赖都不用在添加版本号啦!
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<!-- 集成swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
Nice!收工。