多模块Maven项目中Quarkus自定义扩展mvn打包失败求助
核心原因
问题出在Maven reactor的模块构建范围未覆盖extension-a的deployment/runtime子模块,同时Quarkus扩展的编译时依赖特性要求deployment模块必须存在于本地仓库或reactor构建流程中。根目录执行mvn clean package时,Maven未构建extension-a的deployment模块,导致module-a打包时尝试从中央仓库下载不存在的该依赖。
具体解决步骤
补全extensions-bundle的子模块配置
打开extensions-bundle/pom.xml,确保<modules>节点包含extension-a:<modules> <module>extension-a</module> </modules>补全extension-a的子模块配置
打开extensions-bundle/extension-a/pom.xml,确保<modules>节点包含deployment和runtime:<modules> <module>runtime</module> <module>deployment</module> </modules>这一步能让Maven reactor在构建extensions-bundle时,自动递归构建extension-a的两个子模块。
调整根模块的构建顺序(可选但推荐)
虽然Maven会自动根据依赖关系调整构建顺序,但显式调整根pom的<modules>顺序可避免潜在问题:<modules> <module>lib-module</module> <module>extensions-bundle</module> <module>module-a</module> </modules>先构建被依赖的lib-module,再构建extensions相关模块,最后构建依赖它们的module-a。
确认module-a的依赖配置正确性
确保module-a对extension-a-runtime的依赖使用项目统一版本(避免硬编码版本导致不一致):<dependency> <groupId>你的项目groupId</groupId> <artifactId>extension-a-runtime</artifactId> <version>${project.version}</version> </dependency>执行全量构建验证
在根目录执行以下命令,先安装所有模块到本地仓库,再执行打包:mvn clean install -DskipTests mvn clean package
为什么单独运行module-a的quarkus:dev正常?
Quarkus的quarkus:dev目标会自动检测并构建本地依赖的模块(即使它们不在当前reactor中),且开发模式下可能跳过部分严格的依赖检查;但mvn clean package是标准Maven生命周期,必须严格遵循reactor的模块构建范围,未被纳入构建的模块不会被自动处理。
内容的提问来源于stack exchange,提问作者Matheus

