升级至Java 17与JAXB 3时遇Jakarta XML Schema缺失错误求助
排查JAXB 3升级时jaxb30-maven-plugin的TypeNotPresentException错误
这个错误的核心原因是插件依赖版本与JAXB 3的API规范不匹配,具体问题如下:
- 你使用的是适配JAXB 3.x的
jaxb30-maven-plugin,但插件依赖里引入了JAXB 2.3.3版本的jaxb-runtime。JAXB 3.x已经将所有API从javax.xml.bind包迁移到了jakarta.xml.bind包,XmlSchema类现在属于jakarta.xml.bind.annotation,而JAXB 2.x的依赖中完全没有这个包下的类,导致反射时找不到类型抛出异常。 - 同时你引入的
jakarta.activation版本1.2.1过于老旧,不符合Jakarta EE 9+的规范要求,和JAXB 3.x不兼容。
修正后的插件配置如下,重点更新依赖部分:
<plugin> <groupId>com.evolvedbinary.maven.jvnet</groupId> <artifactId>jaxb30-maven-plugin</artifactId> <version>0.15.0</version> <configuration> <locale>en</locale> <extension>true</extension> </configuration> <executions> <execution> <id>Generate Import Sources</id> <goals> <goal>generate</goal> </goals> <phase>generate-sources</phase> <configuration> <schemaLanguage>XMLSCHEMA</schemaLanguage> <schemaDirectory>${basedir}/src/main/resources/xsd</schemaDirectory> <schemaIncludes> <include>/Import_v1.xsd</include> </schemaIncludes> <generatePackage>com.company.project.v1</generatePackage> <generateDirectory>${basedir}/target/jaxb</generateDirectory> <bindingIncludes> <bindingInclude>Import_v1.xjb</bindingInclude> </bindingIncludes> </configuration> </execution> </executions> <dependencies> <!-- 替换为JAXB 3.x版本的runtime --> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>3.0.2</version> </dependency> <!-- 更新为适配Jakarta EE 9的activation版本 --> <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> <version>2.1.1</version> </dependency> </dependencies> </plugin>
额外注意事项:
- 检查项目中其他与JAXB相关的依赖,确保全部从
javax.xml.bind迁移到jakarta.xml.bind,避免混合依赖导致冲突。 - 如果你的绑定文件(
.xjb)中使用了javax.xml.bind相关的命名空间,需要同步修改为jakarta.xml.bind的命名空间。
内容的提问来源于stack exchange,提问作者pemko
相关产品推荐
相关产品推荐

