SpringBoot项目jar依赖问题报错解析

2025-12-15 20:50

本文主要是介绍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/WebServerFactoryCustomizerSpring 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. 依赖冲突排查流程

  1. 查看日志:获取具体异常信息
  2. 分析依赖树:使用mvn dependency:tree命令
  3. 识别冲突:找出重复的依赖和版本
  4. 解决冲突:使用<exclusions>排除冲突依赖或统一版本
  5. 验证:重新打包并测试

3. 依赖冲突预防措施

  • 定期清理依赖:移除不再使用的依赖
  • 使用BOM管理:通过Spring Boot的BOM统一依赖版本
  • 依赖树分析:在每次添加新依赖前进行依赖树分析
  • 自动化检查:在CI/CD流程中添加依赖冲突检查

七、归纳下:

SpringBoot项目中的依赖问题主要分为以下几类:

  1. 依赖冲突:类找不到、方法找不到、类型转换异常等
  2. 依赖配置错误:坐标错误、范围错误
  3. 依赖传递冲突:不同库之间依赖了同一个库的不同版本
  4. 本地依赖导入问题:未正确配置系统范围依赖

核心排查方法

  • 使用mvn dependency:tree分析依赖树
  • 识别冲突的具体依赖
  • 使用<exclusions>排除冲突依赖
  • 统一依赖版本

最佳实践

  • 使用dependencyManagement统一管理依赖版本
  • 对于本地jar包,确保在打包插件中配置includeSystemScope
  • 添加依赖前先进行依赖树分析
  • 避免不必要的依赖,保持项目简洁

到此这篇关于SpringBoot项目jar依赖问题报错解析的文章就介绍到这了,更多相关springboot jar依赖内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于SpringBoot项目jar依赖问题报错解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156466

相关文章

Golang实现基于角色的访问控制(RBAC)的项目实践

《Golang实现基于角色的访问控制(RBAC)的项目实践》基于角色的访问控制(RBAC)是一种安全机制,通过角色来管理用户权限,本文介绍了一种可落地、易扩展的GolangRBAC实现方案,具有一定... 目录一、RBAC 核心模型设计二、RBAC 核心逻辑实现RBAC 管理器定义基础 CRUD:添加用户

Spring Boot 2.7.8 集成 Thymeleaf的最佳实践与常见问题讨论

《SpringBoot2.7.8集成Thymeleaf的最佳实践与常见问题讨论》本文详细介绍了如何将SpringBoot2.7.8与Thymeleaf集成,从项目依赖到配置文件设置,再到控制器... 目录前言一、如何构建SpringBoot应用1、项目依赖 (pom.XML)2、控制器类3、Thymelea

MybatisPlus 多数据源切换@DS注解失效问题解决

《MybatisPlus多数据源切换@DS注解失效问题解决》在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,下面就来介绍一下该问题的解决,感兴趣的可以... 在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,一个正

R语言中的正则表达式深度解析

《R语言中的正则表达式深度解析》正则表达式即使用一个字符串来描述、匹配一系列某个语法规则的字符串,通过特定的字母、数字及特殊符号的灵活组合即可完成对任意字符串的匹配,:本文主要介绍R语言中正则表达... 目录前言一、正则表达式的基本概念二、正则表达式的特殊符号三、R语言中正则表达式的应用实例实例一:查找匹配

Centos7 firewall和docker冲突问题及解决过程

《Centos7firewall和docker冲突问题及解决过程》本文描述了一个在CentOS7上使用firewalld和Docker容器的问题,当firewalld启动或重启时,会从iptable... 目录系统环境问题描述问题排查解决办法总结本文只是我对问题的记录,只能用作参考,不能China编程说明问题,请

springboot控制bean的创建顺序

《springboot控制bean的创建顺序》本文主要介绍了spring-boot控制bean的创建顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1、order注解(不一定有效)2、dependsOn注解(有效)3、提前将bean注册为Bea

Java中的ConcurrentBitSet使用小结

《Java中的ConcurrentBitSet使用小结》本文主要介绍了Java中的ConcurrentBitSet使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、核心澄清:Java标准库无内置ConcurrentBitSet二、推荐方案:Eclipse

java中的Supplier接口解析

《java中的Supplier接口解析》Java8引入的Supplier接口是一个无参数函数式接口,通过get()方法延迟计算结果,它适用于按需生成场景,下面就来介绍一下如何使用,感兴趣的可以了解一下... 目录1. 接口定义与核心方法2. 典型使用场景场景1:延迟初始化(Lazy Initializati

Java中ScopeValue的使用小结

《Java中ScopeValue的使用小结》Java21引入的ScopedValue是一种作用域内共享不可变数据的预览API,本文就来详细介绍一下Java中ScopeValue的使用小结,感兴趣的可以... 目录一、Java ScopedValue(作用域值)详解1. 定义与背景2. 核心特性3. 使用方法

spring中Interceptor的使用小结

《spring中Interceptor的使用小结》SpringInterceptor是SpringMVC提供的一种机制,用于在请求处理的不同阶段插入自定义逻辑,通过实现HandlerIntercept... 目录一、Interceptor 的核心概念二、Interceptor 的创建与配置三、拦截器的执行顺