You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven项目部署Tomcat遇threetenbp类缺失问题排查与解决

问题根因分析及解决方案

根因拆解

从你提供的信息来看,核心问题可以归纳为以下几点:

  1. 依赖版本不一致:你明确提到计划使用threetenbp 1.4.4,但Maven依赖树显示实际引入的是org.threeten:threetenbp:jar:1.3.5——这说明你的pom.xml配置可能没正确覆盖传递依赖,或是存在隐性依赖冲突导致版本被降级。虽然TemporalAccessor在1.3.5中也存在,但如果代码中用到了1.4.4的专属逻辑,或是打包时jar包缺失,就会触发类找不到的异常。
  2. Tomcat类加载优先级冲突:Tomcat的类加载器是分层结构,如果容器本身、其他部署应用里存在旧版本的threetenbp类,可能会抢占加载优先级,导致你的应用无法读取自己WEB-INF/lib下的正确类文件。
  3. 打包时依赖缺失:可能你的Maven war打包配置遗漏了threetenbp依赖,导致最终生成的war包中WEB-INF/lib目录下没有对应的jar包,Tomcat运行时自然找不到类。

分步解决方案

1. 强制锁定threetenbp为1.4.4版本

在pom.xml中添加依赖管理节点,强制指定版本,避免依赖冲突导致版本被替换:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.threeten</groupId>
            <artifactId>threetenbp</artifactId>
            <version>1.4.4</version>
        </dependency>
    </dependencies>
</dependencyManagement>

同时确保直接依赖也明确指定1.4.4:

<dependencies>
    <dependency>
        <groupId>org.threeten</groupId>
        <artifactId>threetenbp</artifactId>
        <version>1.4.4</version>
    </dependency>
</dependencies>

执行mvn dependency:tree再次确认版本是否已更新为1.4.4。

2. 检查war包的依赖完整性

将打包好的war包解压,查看WEB-INF/lib目录下是否存在threetenbp-1.4.4.jar:

  • 如果不存在,检查war插件配置是否在<exclusions>中误排除了该依赖;
  • 多模块项目要确认该依赖是否被正确传递到war模块中。

3. 排查Tomcat类加载冲突

  • 检查Tomcat的lib目录下是否有threetenbp相关jar包,若有则移除,避免与应用内jar包冲突;
  • 若同一Tomcat实例下其他应用使用了不同版本的threetenbp,可在你的应用Context.xml中添加<Loader delegate="false"/>,强制应用优先加载自身WEB-INF/lib下的类。

4. 用类加载日志定位问题

启动Tomcat时添加JVM参数-verbose:class,查看类加载的详细日志,找到org.threeten.bp.temporal.TemporalAccessor是从哪个jar包加载的,精准定位冲突来源:

-verbose:class

内容的提问来源于stack exchange,提问作者Tapiwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:08:13