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

Quarkus多模块项目父POM启动dev模式报非jar包构建错误

问题根因

Quarkus dev模式默认会将执行命令时所在的模块作为可运行应用启动,强制要求该模块是可产出jar包的应用模块。你当前的父项目packaging类型为pom,本身不包含业务代码、不会输出可运行jar构件,直接在父项目路径执行quarkus dev时,插件会尝试查找父项目对应的jar包,自然会抛出找不到构件的错误。
同时你的父POM配置存在不合理之处:直接在父项目的build/plugins节点下绑定了quarkus-maven-plugin的build、generate-code等构建目标,这类目标只对可运行的Quarkus应用模块生效,pom类型的聚合父项目执行这些目标本身就不符合逻辑。

修复步骤
  • 调整父POM的插件与依赖管理逻辑
    把quarkus-maven-plugin、jandex-maven-plugin、maven-failsafe-plugin这类仅对可运行Quarkus模块生效的插件,从父POM的build/plugins节点挪到build/pluginManagement节点下,仅做版本和通用配置的声明,不直接绑定到父项目的构建生命周期。父POM的build/plugins里只保留maven-compiler-plugin、maven-surefire-plugin这类所有模块通用的基础编译、单元测试插件即可。
    同时把quarkus-arc、quarkus-junit5这类依赖从父POM的dependencies节点挪到dependencyManagement节点做版本管理,不要全局强制所有子模块继承,哪个子模块需要使用再单独在自身POM中引入。
  • 给可运行子模块单独配置Quarkus插件
    你提到三个子模块单独启动dev模式都能正常运行,确认其中作为应用入口的模块(通常是对外提供接口的controller模块),在该模块自身的POM中声明引入quarkus-maven-plugin,绑定对应的build、generate-code等执行目标;model这类作为公共依赖的普通jar模块,不需要配置Quarkus插件,按普通Maven jar模块配置即可。
  • 用指定模块参数的方式在父目录启动dev模式
    后续需要在父项目路径启动dev模式时,不要直接执行裸的quarkus dev命令,通过Maven参数指定要启动的可运行模块,同时自动构建其依赖的本地子模块,命令示例(假设你的启动入口是controller模块):
    quarkus dev -pl controller -am
    
    其中-pl参数指定要启动的目标模块,-am参数会自动编译构建该模块依赖的同项目下其他子模块(比如model、view这些依赖包),无需手动提前install子模块就能正常启动热更新开发模式。
  • 修复构建警告
    日志中提示model模块的lombok依赖使用了LATEST/RELEASE这类浮动版本号,这类版本写法已经被Maven标记为废弃,建议在父POM的dependencyManagement中给lombok指定固定的稳定版本,消除构建警告,避免后续版本变动导致构建不稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:27:46