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

移除quarkus.package.type=legacy-jar后遇DataTypeFactoryImpl类找不到异常

解决OpenShift中Quarkus应用找不到org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl的问题

问题背景

移除application.properties中的legacy-jar配置后,OpenShift集群运行Quarkus应用时出现类找不到异常,本地dev模式正常,已添加quarkus-jaxb依赖但问题未解决。

核心原因

移除legacy-jar后,Quarkus默认切换为fast-jar打包模式,该模式会对依赖进行严格的裁剪优化,可能将未被直接引用的Xerces DatatypeFactory实现类排除;同时quarkus-jaxb依赖并未包含完整的Xerces DatatypeFactory实现。

解决方案

1. 直接引入Xerces实现依赖

在pom.xml中添加xercesImpl依赖,确保包含缺失的类:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.12.2</version> <!-- 版本兼容Quarkus 2.16.x系列 -->
    <scope>compile</scope>
</dependency>

2. 阻止Quarkus优化移除该类

如果依赖已存在但被打包优化移除,可在application.properties中配置保留该类:

quarkus.arc.unremovable-classes=org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl

3. 强制指定DatatypeFactory实现

通过JVM参数强制指定使用目标实现类,可在application.properties中添加:

quarkus.jvm.args=-Djavax.xml.datatype.DatatypeFactory=org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl

或者在OpenShift的启动命令中直接追加该参数。

4. 验证Docker镜像中的依赖

检查target/quarkus-app/lib目录下是否存在xercesImpl-*.jar,如果不存在,确认依赖的scope为compile而非provided,重新打包后再构建Docker镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:22:53