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
相关产品推荐
相关产品推荐

