Gradle构建报错:boolean类型@Input属性不可为@Optional 如何解决
问题描述
使用Gradle进行项目构建时抛出异常,当前使用的环境版本如下:
- Gradle:6.2.2
- SpotBugs插件:2.0.0
完整报错信息:
Property 'showProgress' @Input properties with primitive type 'boolean' cannot be @Optional. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
问题原因
- Gradle从6.x版本开始强化了任务输入属性的注解校验规则:被
@Input标记的属性如果是Java原始类型(比如基础类型boolean,而非包装类Boolean),本身不存在null的可能,因此不允许同时标注@Optional注解,该不规范写法在6.x版本中会抛出废弃提示,到Gradle 7.0版本会直接判定为构建错误。 - 2.0.0版本的SpotBugs插件存在写法不规范问题:插件内部将
showProgress这个boolean原始类型的配置属性同时标记了@Input和@Optional注解,刚好触发了上述校验规则。
解决方法
按照优先级从高到低可选以下方案:
- 升级SpotBugs插件版本到4.0.0及以上。高版本SpotBugs已经修复了这个注解写法问题,完全适配Gradle 6.x及以上版本的校验规则,只需要修改构建脚本中SpotBugs的版本号,重新同步依赖后构建即可。
- 若暂时无法升级插件版本,可以在SpotBugs的配置块中给
showProgress属性显式赋值,跳过@Optional的校验逻辑,示例配置:
spotbugs { showProgress = false // 可根据实际需求设置为true/false }
配置完成后重新构建即可消除报错。
- 临时降级Gradle版本到6.0以下。该方案仅作为临时应急手段,不推荐长期使用,低版本Gradle存在已知的功能缺陷和安全隐患,且无法兼容多数新版Gradle插件。
内容的提问来源于stack exchange,提问作者J.HE
相关产品推荐
相关产品推荐

