当前位置: 代码网 > it编程>编程语言>Java > SpringBoot项目jar依赖问题报错解析

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

2025年12月15日 Java 我要评论
常见依赖错误类型及报错内容1. 依赖冲突类错误(1) classnotfoundexception(类找不到)报错内容:java.lang.noclassdeffounderror: org/spri

常见依赖错误类型及报错内容

1. 依赖冲突类错误

(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) 自定义starter依赖冲突

报错内容

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. 检查依赖范围

[info] --- 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>依赖库版本冲突使用<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</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依赖内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com