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

Java8迁移至Java17后Tomcat9部署遇ClassNotFoundException求助

问题原因分析

从错误栈java.lang.ClassNotFoundException: javax.xml.ws.WebServiceProvider可定位核心问题:

  1. 代码残留旧API引用:尽管已替换大部分javax依赖为jakarta,但项目中仍存在javax.xml.ws.WebServiceProvider注解或相关类的引用,未替换为Jakarta EE对应的jakarta.xml.ws.WebServiceProvider。
  2. API缺失导致类加载失败:Java 17已完全移除JAX-WS(Java API for XML Web Services)相关的javax.xml.ws包;而Tomcat 9本身不内置Jakarta XML Web Services的API与实现,运行时无法找到对应类。
  3. Tomcat版本兼容性不足:若使用的Tomcat 9版本低于9.0.60,会存在Java 17支持缺陷,引发类加载异常。
解决方法

1. 彻底替换旧API引用

全局搜索项目中所有javax.xml.ws相关代码,批量替换为Jakarta EE对应包:

  • 将import javax.xml.ws.WebServiceProvider;改为import jakarta.xml.ws.WebServiceProvider;
  • 同步替换其他JAX-WS相关注解/类(如@WebService、@WebMethod、WebServiceContext等),确保所有相关引用从javax.xml.ws.*迁移到jakarta.xml.ws.*

2. 添加Jakarta JAX-WS依赖

在项目构建文件中添加JAX-WS的API与运行时实现依赖:

Maven配置

<!-- Jakarta JAX-WS API -->
<dependency>
    <groupId>jakarta.xml.ws</groupId>
    <artifactId>jakarta.xml.ws-api</artifactId>
    <version>2.3.3</version>
    <scope>compile</scope>
</dependency>
<!-- JAX-WS 运行时实现(Metro) -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.5</version>
    <scope>runtime</scope>
</dependency>

Gradle配置

implementation 'jakarta.xml.ws:jakarta.xml.ws-api:2.3.3'
runtimeOnly 'com.sun.xml.ws:jaxws-rt:2.3.5'

3. 升级Tomcat 9版本

将Tomcat 9升级至9.0.60及以上版本,该版本开始正式支持Java 17,解决版本兼容引发的异常。

4. 验证编译与部署配置

  • 确认项目编译级别设置为Java 17(IntelliJ中可通过File > Project Structure > Project Settings > Project调整)。
  • 检查Tomcat部署配置,确保运行时使用的JDK为Java 17,避免版本不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:35:57