Gradle多项目运行失败:执行./gradlew run提示无主类
问题原因与解决办法
你的问题核心是application插件的作用范围配置错误,导致主类信息没有正确绑定到test子项目:
错误分析
你把application插件和mainClass配置放在了根项目的build.gradle.kts里,要么是根项目本身被应用了application插件(但根项目没有主类),要么是配置没有正确传递到test子项目,导致执行./gradlew run时,test子项目的run任务找不到主类定义。
正确配置步骤
1. 调整根项目的build.gradle.kts
根项目只负责统一管理子项目的公共配置,不要直接引入application插件:
// 根项目 build.gradle.kts plugins { java // 仅引入java插件用于公共配置 } subprojects { apply(plugin = "java") repositories { mavenCentral() } // 公共依赖配置(比如测试依赖) dependencies { testImplementation(platform("org.junit:junit-bom:5.9.1")) testImplementation("org.junit.jupiter:junit-jupiter") } tasks.test { useJUnitPlatform() } }
2. 在test子项目中单独配置application插件
在test子项目的build.gradle.kts里,单独引入application插件并指定主类:
// test子项目 build.gradle.kts plugins { application } application { mainClass.set("org.example.Main") }
3. 运行项目
- 直接指定运行test子项目的任务:
./gradlew :test:run - 如果想让根目录的
./gradlew run默认执行test子项目的run任务,可以在根项目的build.gradle.kts末尾添加:
tasks.run { dependsOn(":test:run") }
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

