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

如何为OpenJDK 11添加JAXB,解决外部Jar运行的JAXB异常?

解决OpenJDK 11运行Jar时JAXB异常的问题

因为JAXB从JDK 9开始就被标记为废弃模块,到JDK 11已经完全从JDK中移除了,所以依赖JAXB的应用在OpenJDK 11上运行时会抛出相关异常。不用Maven的话,你可以通过以下两种方式解决:

方法1:命令行运行时手动引入JAXB依赖Jar

  1. 下载必要的JAXB相关依赖包
    你需要获取以下几个Jar文件(建议选择兼容JDK 11的2.3.x系列版本):

    • jaxb-api.jar(JAXB核心API)
    • jaxb-impl.jar(JAXB实现类)
    • jaxb-core.jar(JAXB核心工具类)
    • activation.jar(JAXB依赖的激活框架,JDK 11也移除了这个)
  2. 整理依赖包
    把下载好的所有依赖Jar放到同一个文件夹里,比如命名为lib,和你的应用Jar(比如app.jar)放在同一目录下。

  3. 用命令行运行应用
    根据操作系统的不同,使用对应的命令:

    • Windows系统:
      java -cp "app.jar;lib/*" com.example.YourMainClass
      
    • Linux/macOS系统:
      java -cp "app.jar:lib/*" com.example.YourMainClass
      

    注意:com.example.YourMainClass需要替换成你应用Jar里的主类——可以通过jar tf app.jar查看Jar内的类结构,或者打开Jar的META-INF/MANIFEST.MF文件,找到Main-Class项的值。

方法2:将依赖包合并到应用Jar中

如果不想每次运行都指定类路径,可以把JAXB依赖和应用Jar合并成一个包含所有依赖的可执行Jar:

  1. 解压所有Jar文件

    • 先创建一个临时目录,比如temp
    • 解压你的应用Jar到temp目录:jar xf app.jar
    • 依次解压所有JAXB依赖Jar到temp目录:jar xf jaxb-api.jar、jar xf jaxb-impl.jar等
  2. 重新打包成新的可执行Jar
    在temp目录外执行命令,指定主类和Manifest文件:

    jar cvfm merged-app.jar temp/META-INF/MANIFEST.MF -C temp/ .
    

    之后直接运行java -jar merged-app.jar即可,无需再指定额外的类路径。

小提示:如果你的应用是基于旧的javax.xml.bind包开发的,不要下载Jakarta EE版本的JAXB(包名为jakarta.xml.bind),否则会出现类找不到的问题,选择2.3.x系列的旧版本依赖即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:04:09