本文主要是介绍SpringBoot项目jar依赖问题报错解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《SpringBoot项目jar依赖问题报错解析》本文主要介绍了SpringBoot项目中常见的依赖错误类型、报错内容及解决方法,依赖冲突包括类找不到、方法找不到、类型转换异常等,本文给大家介绍的非常...
常见依赖错误类型及报错内容
1. 依赖冲突类javascript错误
(1) ClassNotFoundException(类找不到)
报错内容:
Java.lang.NoClassDefFoundError: org/springframework/boot/web/server/WebServerFactoryCustomizer
原因:
- 依赖版本不一致,导致类找不到
- 项目中存在不同版本的同一个类
- 依赖冲突,如知识库[3]中描述的"WebServerFactoryCustomizer这个类是2.x版本才存在"
典型场景:
- Spring Boot版本混乱
- 依赖库版本不一致
(2) NoSuchMethodError(方法找不到)
报错内容:
java.lang.NoSuchMethodError: org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory.addErrorPages(Ljava/util/List;)V
原因:
- 依赖版本不匹配,方法签名不一致
- 不同版本的依赖库之间存在方法差异
(3) ClassCastException(类型转换异常)
报错内容:
java.lang.ClassCastException: com.example.MyClass cannot be cast to com.example.MyClass
原因:
- 加载了不同版本的同一个类
- 类加载器隔离问题
(4) LinkageError(链接错误)
报错内容:
java.lang.LinkageError: loader 'app' attempted to load class 'com.example.MyClass' from both 'module1' and 'module2'
原因:
- 类被不同类加载器加载
- 依赖版本不一致导致类加载冲突
2. 依赖配置错误
(1) 依赖坐标错误
报错内容:
Could not find artifact com.zjbDOS.cloud:zjbdos-cloud-framework-core:pom:1.0.0 in alimaven (http://maven.aliyun.com/nexus/content/groups/public/)
原因:
- 依赖坐标(groupId、artifactId、version)错误
- 仓库地址配置错误
- 依赖未发布到指定仓库
解决方案:
- 确认依赖坐标正确
- 检查仓库配置
- 确认依赖已发布到指定仓库
(2) 依赖范围配置错误
报错内容:
java.lang.NoClassDefFoundError: com.example.ThirdPartyClass
原因:
- 依赖范围(scope)设置为
system,但未在打包插件中配置includeSystemScope - 依赖未被正确打包到最终的jar中
解决方案:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>3. 依赖传递冲突
(1) 依赖传递冲突
报错内容:
java.lang.NoSuchMethodError: com.baomidou.myBATisplus.extension.plugins.PaginationInterceptor.<init>(Lcom/baomidou/mybatisplus/core/parser/ISqlParser;)V
原因:
- 项目中引入了多个版本的MyBatis Plus
- 如知识库[4]中描述:“zjbdos-cloud-framework-core里面发现也引入了mybatis-plus-extension导致与现有项目中的mybatis-plus-extension依赖发生冲突”
解决方案:
<dependency>
<groupId>com.zjbdos.cloud</groupId>
<artifactId>zjbdos-cloud-framework-core</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
</exclusion>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
</exclusion>
</exclusions>
</dependency>(2) 自定义stajavascriptrter依赖冲突
报错内容:
java.lang.ClassNotFoundException: com.example.MyCustomStarter
原因:
- 自定义starter与项目中其他依赖冲突
- 依赖版本不匹配
4. 依赖冲突排查错误
(1) 依赖冲突排查错误
报错内容:
[WARNING] The following dependencies have been relocated: [WARNING] com.example:third-party-library:jar:1.2.3 -> org.hibernate:hibernate-core:jar:5.4.30.Final [WARNING] com.example:third-party-library:jar:1.2.3 -> org.hibernate:hibernate-core:jar:5.2.12.Final
原因:
- 依赖树分析不充分
- 未正确识别冲突的依赖
解决方案:
- 使用
mvn dependency:tree命令分析依赖树 - 通过
-Dincludes参数过滤特定依赖 - 例如:
mvn dependency:tree -Dincludes=com.yourpackage
三、依赖冲突解决技巧
1. 利用Maven依赖排除机制(最常用方法)
报错内容:
java.lang.NoClassDefFoundError: org/hibernate/Session
解决方案:
<dependency>
<groupId>com.example</groupId>
<artifactId>third-party-library</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>
最佳实践:
- 使用
mvn dependency:tree命令分析依赖树 - 找出冲突的具体依赖
- 排除依赖时确保被排除的依赖在其他地方有正确版本引入
2. 依赖版本统一
报错内容:
java.lang.NoSuchMethodError: org.springframework.data.jpa.repository.JpaRepository.save(Ljava/lang/Iterable;)Ljava/util/Collection;
解决方案:
<properties>
<spring-boot.version>2.7.18</spring-boot.version>
<spring-data.version>2022.0.0</spring-data.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>${spring-data.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>3. 本地jar包导入问题
报错内容:
java.lang.NoClassDefFoundError: com.example.ThirdPartyClass
原因:
- 未在打包插件中配置
includeSystemScope - 依赖范围设置为
system但未正确打包
解决方案:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
四、依赖问题排查流程
1. 查看详细错误日志
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/app] threw exception [Request processing failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/boot/web/server/WebServerFactoryCustomizer]
关键点:
- 从日志中获取具体异常类型
- 查看异常堆栈跟踪
- 确认异常发生的代码位置
2. 分析依赖树
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ myapp --- [INFO] com.example:myapp:jar:1.0.0 [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.7.18:compile [INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.7.18:compile [INFO] | | \- org.springframework.boot:spring-boot:jar:2.7.18:compile [INFO] | \- org.springframework.boot:spring-boot-starter-tomcat:jar:2.7.18:compile [INFO] | \- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.73:compile [INFO] +- com.example:third-party-library:jar:1.2.3:compile [INFO] | \- org.hibernate:hibernate-core:jar:5.4.30.Final:compile [INFO] \- org.hibernate:hibernate-core:jar:5.2.12.Final:compile
关键点:
- 使用
mvn dependency:tree命令分析依赖树 - 找出冲突的依赖版本
- 识别重复的依赖项
3. 检查依赖范围
[IjsNFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ myapp --- [INFO] com.example:myapp:jar:1.0.0 [INFO] +- com.example:third-party-library:jar:1.2.3:system [INFO] | \- org.hibernate:hibernate-core:jar:5.4.30.Final:system [INFO] \- org.hibernate:hibernate-core:jar:5.2.12.Final:compile
关键点:
- 检查依赖范围(scope)是否正确
- 确认system范围的依赖是否配置了
includeSystemScope
五、依赖问题常见场景及解决方案
| 问题类型 | 报错内容 | 原因 | 解决方案 |
|---|---|---|---|
| 依赖冲突 | NoClassDefFoundError: org/springframework/boot/web/server/WebServerFactoryCustomizer | Spring Boot版本混乱 | 使用mvn dependency:tree分析,排除冲突依赖 |
| 依赖冲突 | NoSuchMethodError: org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory.addErrorPages | 依赖版本不匹配 | 统一依赖版本,使用dependencyManagement |
| 依赖配置错误 | Could not find artifact com.zjbdos.cloud:zjbdos-cloud-framework-core:pom:1.0.0 | 依赖坐标或仓库错误 | 检查依赖坐标和仓库配置 |
| 本地jar导入问题 | NoClassDefFoundError: com.example.ThirdPartyClass | 未配置includeSystemScope | 在spring-boot-maven-plugin中添加includeSystemScope |
| 依赖传递冲突 | NoSuchMethodError: com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor.<init> | 依赖库版本冲突 | 使android用<exclusions>排除冲突依赖 |
| 循环依赖问题 | BeanCurrentlyInCreationException | 构造器注入导致的循环依赖 | 使用@Lazy或重构架构 |
六、最佳实践建议
1. 依赖管理规范
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.7.18</spring-boot.version>
<mybatis-plus.version>3.5.7</mybatis-plus.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.baomidou&aFnOFXyalt;/groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
</dependencies>
</dependencyManagement>2. 依赖冲突排查流程
- 查看日志:获取具体异常信息
- 分析依赖树:使用
mvn dependency:tree命令 - 识别冲突:找出重复的依赖和版本
- 解决冲突:使用
<exclusions>排除冲突依赖或统一版本 - 验证:重新打包并测试
3. 依赖冲突预防措施
- 定期清理依赖:移除不再使用的依赖
- 使用BOM管理:通过Spring Boot的BOM统一依赖版本
- 依赖树分析:在每次添加新依赖前进行依赖树分析
- 自动化检查:在CI/CD流程中添加依赖冲突检查
七、归纳下:
SpringBoot项目中的依赖问题主要分为以下几类:
- 依赖冲突:类找不到、方法找不到、类型转换异常等
- 依赖配置错误:坐标错误、范围错误
- 依赖传递冲突:不同库之间依赖了同一个库的不同版本
- 本地依赖导入问题:未正确配置系统范围依赖
核心排查方法:
- 使用
mvn dependency:tree分析依赖树 - 识别冲突的具体依赖
- 使用
<exclusions>排除冲突依赖 - 统一依赖版本
最佳实践:
- 使用
dependencyManagement统一管理依赖版本 - 对于本地jar包,确保在打包插件中配置
includeSystemScope - 添加依赖前先进行依赖树分析
- 避免不必要的依赖,保持项目简洁
到此这篇关于SpringBoot项目jar依赖问题报错解析的文章就介绍到这了,更多相关springboot jar依赖内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于SpringBoot项目jar依赖问题报错解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!