Quarkus 3.x升级后Gradle构建报错:找不到主类Web
Quarkus 3.x升级时基础子模块构建报错"Could not find or load main class Web"
问题详情
将Quarkus项目从2.16版本升级到3.x系列(3.0/3.1/3.2均尝试过),其中一个作为基础依赖模块(无需独立运行,仅供其他模块依赖)的子模块构建失败,报错:
Error: Could not find or load main class Web
该子模块的预期主类是标注了@QuarkusMain注解的ProductServerMain,但构建时触发quarkusGenerateCode任务报错,堆栈信息如下:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':security-suite-server-base:quarkusGenerateCode'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:142) ...(省略重复堆栈内容)
已尝试的无效方案
- 停止Gradle守护进程并删除
.gradle文件夹 - 在子模块
build.gradle中显式配置主类为com.example.ProductServerMain
针对Quarkus 3.x变更的解决方案
Quarkus 3.x对Gradle插件的默认行为做了调整,尤其是对非独立运行的依赖模块,需要针对性修改配置:
1. 切换为基础Quarkus插件
如果该模块仅提供代码依赖,无需打包成可运行应用,将子模块的Gradle插件从完整的quarkus-gradle-plugin替换为quarkus-base-plugin,避免触发应用构建相关的主类检测逻辑:
plugins { id 'io.quarkus.platform.base' version '3.2.0.Final' // 替换原有的 id 'io.quarkus' }
2. 显式禁用主类检测
若必须保留完整插件,通过配置告知Quarkus无需寻找主类:
- 在子模块的
application.properties中添加:quarkus.application.main-class= - 或者在
build.gradle中配置:quarkus { application { mainClass = '' } }
3. 清理无效配置
检查子模块中是否存在遗留配置(如旧的META-INF/quarkus-application.properties),其中可能错误指定了Web作为主类,Quarkus 3.x对配置优先级的处理有变化,需清理这类无效配置。
内容的提问来源于stack exchange,提问作者Adrian Aulbach
相关产品推荐
相关产品推荐

