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

JDK17下使用javac编译带JAXB依赖的Java文件报错求助

解决JDK17编译JAXB代码时jakarta.xml.bind.annotation找不到的问题

一、先确认依赖jar是不是对的

得保证/Users/Desktop/jarscheck/里放的是Jakarta EE版本的JAXB相关jar,不是旧的Java EE版(旧版包名是javax.xml.bind,对应jar是jaxb-api.jar这类)。必须的核心jar有三个:

  • jakarta.xml.bind-api.jar(API定义包)
  • jaxb-impl.jar(具体实现包)
  • jakarta.activation-api.jar(JDK9+必须,因为activation模块被移除了)

如果你的jar还是旧版javax开头的,赶紧换成Jakarta版本的。

二、修正javac的classpath写法

JDK17下javac的classpath要正确包含目录里所有jar,macOS/Linux用:当分隔符,而且得用通配符*匹配所有jar,注意引号的用法:

javac -cp "/Users/Desktop/jarscheck/*" exposeservices/*.java

要是路径里有空格,必须用引号把整个classpath包起来;通配符*也得放在引号里,不然会被shell拆成单个文件,导致jar没全加进去。

先跑个命令确认目录里的jar存在:

ls /Users/Desktop/jarscheck/

看看输出里有没有上面说的那几个Jakarta版jar。

三、检查生成的代码包引用

打开exposeservices里的Java文件,看顶部import是不是:

import jakarta.xml.bind.annotation.*;

要是是旧的javax.xml.bind.annotation.*,说明wsimport生成的是旧版代码。要么换用Apache CXF的wsdl2java这类工具生成Jakarta版代码,要么手动全局替换包名(手动换容易漏,不推荐)。

四、额外排查点

  • 要是你的项目是模块化的(有module-info.java),得在里面加依赖声明:
requires jakarta.xml.bind;
requires jakarta.activation;
  • 确认用的javac是JDK17的,跑javac -version看看版本号对不对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:11