升级Spring Boot2.5.6与Gradle7.0后bootRun找不到主类问题求助
解决方案
1. 修正主类配置方式
Spring Boot 2.4+ 对应的Gradle插件已经废弃了bootRun块内直接设置main属性的用法,需替换为mainClass属性,也可以选择将主类配置统一放到全局springBoot块中:
// 方式1:直接在bootRun内修改 bootRun { mainClass = 'com.test.TestApplication' // 替换原来的main = 'xxx'配置 // 其余原有配置保持不变 } // 方式2:全局配置适配性更强 springBoot { mainClass = 'com.test.TestApplication' }
2. 修复已废弃的compile配置引用
Gradle 7.0已经完全移除了早已标记废弃的compile依赖配置,你当前配置中developmentOnly.extendsFrom compile会导致依赖无法正确被引入,需替换为implementation:
configurations { developmentOnly.extendsFrom implementation // 将compile改为implementation runtimeClasspath { extendsFrom developmentOnly } }
你现有依赖已经全部声明在implementation下,修改后依赖就能正确被识别到pathingJar和运行时classpath中。
3. 补全bootRun的classpath配置
你当前在bootRun的doFirst配置里只添加了sourceSets.main.output.files和pathingJar,遗漏了运行时必需的资源文件路径,建议调整为:
bootRun { mainClass = 'com.test.TestApplication' dependsOn pathingJar doFirst { // 完整包含源码输出、资源文件和pathingJar classpath = files(sourceSets.main.output, pathingJar.archiveFile) } // 其余原有配置保持不变 }
4. (可选)验证主类编译结果
先执行一次classes任务,检查build/classes/java/main/com/test/TestApplication.class文件是否存在,确认编译阶段没有遗漏主类。
(可选)排查手段
如果修改后仍然报错,可以执行命令./gradlew bootRun --debug | grep "classpath",查看运行时的classpath列表,确认是否包含build/classes/java/main目录。
修改完以上配置后,再执行clean bootRun -Dspring.profiles.active="some-profile"即可正常启动。
内容的提问来源于stack exchange,提问作者RazvanParautiu
相关产品推荐
相关产品推荐

