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

使用OpenJDK11时Ant构建XML中XJC任务抛出InvocationTargetException错误求助

解决OpenJDK11下Ant XJC任务抛出java.lang.Error: java.lang.reflect.InvocationTargetException的问题

从错误栈根因java.lang.NoSuchFieldError: REFLECTION可以判断,这是JAXB版本不兼容或依赖缺失引发的类加载冲突问题,结合OpenJDK11环境特性,给出以下针对性解决方法:

一、降级JAXB版本到兼容OpenJDK11的稳定版

JAXB 4.x属于Jakarta EE 9+规范(包名从javax.xml.bind改为jakarta.xml.bind),而OpenJDK11更适配基于javax.xml.bind的JAXB 2.3.x版本,该版本是Java EE时代的稳定兼容版。

操作步骤:

  1. 替换现有JAXB依赖为以下版本:
    • jaxb-api-2.3.1.jar(JAXB核心API)
    • jaxb-xjc-2.3.8.jar(XJC代码生成工具)
    • jaxb-core-2.3.0.jar(JAXB核心工具包)
    • jaxb-impl-2.3.8.jar(JAXB具体实现)
    • istack-commons-runtime-3.0.12.jar(补充反射相关依赖,避免字段缺失)
  2. 修正Ant的XJC任务类路径配置:
<xjc destdir="${src.java.generated.dir}" package="task.config" readonly="false" removeOldOutput="yes" extension="true">
    <classpath>
        <pathelement location="${libs.dir}/jaxb/jaxb-api-2.3.1.jar"/>
        <pathelement location="${libs.dir}/jaxb/jaxb-xjc-2.3.8.jar"/>
        <pathelement location="${libs.dir}/jaxb/jaxb-core-2.3.0.jar"/>
        <pathelement location="${libs.dir}/jaxb/jaxb-impl-2.3.8.jar"/>
        <pathelement location="${libs.dir}/jaxb/jaxb-jxc-2.3.8.jar"/>
        <pathelement location="${libs.dir}/jaxb/istack-commons-runtime-3.0.12.jar"/>
    </classpath>
    <schema dir="${config.location}" includes="task.xsd" />
    <binding dir="${config.location}" includes="task.xjb" />
    <produces dir="${src.java.generated.dir}/task/config" />
    <arg value="-no-header" />
</xjc>

二、若坚持使用JAXB 4.x的适配方案

如果必须使用JAXB 4.x,需完成以下调整:

  1. 将项目中所有JAXB相关代码从javax.xml.bind迁移到jakarta.xml.bind包名
  2. 替换Ant内置XJC任务为直接调用JAXB 4.x的命令行工具,避免版本冲突:
<exec executable="${java.home}/bin/java">
    <arg value="-cp"/>
    <arg path="${libs.dir}/jaxb/jakarta.xml.bind-api-4.0.2.jar:${libs.dir}/jaxb/jaxb-xjc-4.0.2.jar:${libs.dir}/jaxb/jaxb-core-4.0.2.jar:${libs.dir}/jaxb/jaxb-impl-4.0.2.jar:${libs.dir}/jaxb/istack-commons-runtime-4.0.2.jar"/>
    <arg value="com.sun.tools.xjc.XJC"/>
    <arg value="-d"/>
    <arg value="${src.java.generated.dir}"/>
    <arg value="-p"/>
    <arg value="task.config"/>
    <arg value="-no-header"/>
    <arg value="-extension"/>
    <arg value="${config.location}/task.xsd"/>
    <arg value="-b"/>
    <arg value="${config.location}/task.xjb"/>
</exec>

错误根源说明

OpenJDK11已完全移除JDK内置的JAXB实现,需手动引入完整依赖包。你之前使用的JAXB 4.x版本与OpenJDK11环境、Ant内置XJC任务存在包名/类结构冲突,导致NavigatorImpl类无法找到REFLECTION字段,最终触发InvocationTargetException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:52:24