Spring Boot2.5.8升级2.6.2时mainClassName属性未知报错如何修复
报错原因
这个报错是Spring Boot 2.6版本Gradle插件做了不兼容的DSL调整导致的:2.5.x版本中springBoot扩展下的mainClassName属性在2.6版本已经被正式移除,直接沿用旧写法就会抛出未知属性的错误。
修复方案
把旧的主类配置替换为2.6版本支持的写法即可,两种常用方案选一种就行:
- 在springBoot扩展中配置(最通用)
替换原有配置为如下写法,注意mainClass是属性对象,需要调用set方法赋值,不能直接用等号接字符串:springBoot { mainClass.set('com.mir3.service.contactfileparser.Main') } - 配合application插件配置
如果项目已经应用了Gradle官方的application插件,直接在application块下配置主类即可,Spring Boot插件会自动识别这个配置,不需要在springBoot块重复配置:application { mainClass = 'com.mir3.service.contactfileparser.Main' }
2.5.8升级到2.6.2的其他高频兼容点
除了主类配置的变更,还有两个常见踩坑点提前适配,避免升级后启动失败:
- 2.6版本默认禁止Bean循环依赖,如果启动时抛出循环依赖相关错误,可临时通过配置开启兼容(长期建议从代码层面解耦循环依赖,不要长期依赖这个配置):
# application.properties配置项 spring.main.allow-circular-references=true - 2.6版本Spring MVC默认使用
PathPatternParser做路径匹配,如果你用的是低版本Swagger、Knife4j或者自定义过路径匹配逻辑,大概率会出现接口404问题,可临时切回旧的Ant路径匹配策略过渡:spring.mvc.pathmatch.matching-strategy=ant_path_matcher - 如果之前在
bootJar、bootWar任务里也配置了mainClassName,同样要改成mainClass.set(xxx)的写法,否则也会报同类未知属性错误。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

