能否将Quarkus扩展的运行时与部署JAR合并为单个工件?
Quarkus扩展runtime与deployment模块合并打包的官方支持情况
核心结论:不建议将Quarkus扩展的runtime和deployment模块合并为单个JAR,且这种方式不受官方支持。
原因如下:
- Quarkus的扩展架构天生依赖runtime和deployment模块的分离:
- runtime模块包含应用运行时所需的核心逻辑、API和依赖,是最终应用包的一部分;
- deployment模块仅在构建阶段(如代码增强、生成、配置处理)生效,属于构建时依赖,不应被带入运行时。
- 官方通过特定的命名规则(如
xxx-deployment对应xxx-runtime)和Maven工件分类来识别扩展的构建逻辑,强行合并会破坏Quarkus的扩展加载机制,引发构建失败、运行时依赖冲突等问题。
关于你尝试的打包插件:
maven-assembly-plugin和maven-shade-plugin无法成功合并的本质是它们不符合Quarkus扩展的架构设计,就算强行合并出单个JAR,也无法被Quarkus正确识别为合法扩展。- 你用
flatten-maven-plugin处理父POM的方式是可行的,官方认可这种消除父POM传递依赖的方案。
替代方案:
- 若觉得分发多个工件麻烦,可将扩展发布到Maven仓库。用户使用时只需引入runtime模块的依赖,Quarkus会自动通过依赖管理机制关联对应的deployment模块,无需用户手动添加。
内容的提问来源于stack exchange,提问作者feliperaindo
相关产品推荐
相关产品推荐

