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

为什么生产环境Quarkus应用打包时会包含deployment JAR包

Quarkus生产镜像引入deployment包问题说明与解决方案

核心结论

正常非可变生产模式的Quarkus应用运行时,完全不需要deployment相关JAR包和Maven依赖,你遇到的属于异常的依赖传递引入问题。

引入异常依赖的原因

你使用的Quarkus 2.2.3.Final属于较早的2.x分支版本,存在已知的扩展依赖传递异常问题,会误将扩展的deployment构建包作为compile scope依赖引入到最终构建产物中。少数情况也可能是项目配置错误导致:

  • 误将quarkus-maven-plugin作为普通依赖添加到项目dependencies节点,而非仅在build/plugins中配置
  • 打包时指定了-Dquarkus.package.type=mutable-jar参数,可变包模式默认会打包deployment相关包用于运行时动态调整扩展

deployment包的作用

只有以下场景需要用到deployment包,其余场景都可以安全排除:

  • 运行Quarkus开发模式(dev mode),用于实时修改代码、配置后的热增强、热加载
  • 使用可变Jar包(mutable-jar)部署,需要在运行时动态调整扩展配置、新增扩展
  • 扩展二次开发场景,需要用到扩展的构建态API
    deployment包的核心作用是处理扩展的配置解析、类的AOT增强、运行时代理生成、扩展加载逻辑编排,这些逻辑在普通生产构建阶段已经执行完成,运行时完全不需要。

排除方法

你可以按优先级选择以下方案解决:

  • 最优方案:升级Quarkus到当前稳定维护版本(2.7.x最新版或3.x版本),这类依赖传递异常问题已经在后续版本中修复
  • 手动排除依赖:在引入quarkus-undertow的依赖配置中增加排除规则,示例如下:
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-undertow</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-undertow-deployment</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-core-deployment</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 检查打包配置:确认构建命令中没有添加-Dquarkus.package.type=mutable-jar参数,且quarkus-maven-plugin仅在build/plugins节点下配置,没有作为普通依赖引入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:04