升级React Native至0.76.9后因“对非空接收者Jvm!进行不必要的安全调用”构建失败(已指定-Werror)
升级React Native至0.76.9后因“对非空接收者Jvm!进行不必要的安全调用”构建失败(已指定-Werror)
最近把React Native从0.73.9升级到0.76.9之后,构建项目时直接碰到了这个报错:
> Task :gradle-plugin:react-native-gradle-plugin:compileKotlin FAILED e: warnings found and -Werror specified w: file:///<PROJECT_LOCATION>/node_modules/@react-native/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt:97:35 Unnecessary safe call on a non-null receiver of type Jvm! FAILURE: Build failed with an exception.
这个问题的根源很明确:React Native官方的gradle插件代码里有个小疏漏——在第97行对一个非空类型的Jvm!对象用了不必要的安全调用(?.),而你的项目构建时开启了-Werror选项,会把所有警告都当成错误处理,所以直接导致构建失败。
给你几个可行的解决思路:
临时绕过(快速解决):
可以先暂时关闭-Werror选项,让构建忽略这个警告。找到项目android/build.gradle文件,检查subprojects里的kotlinOptions配置,把freeCompilerArgs中的"-Werror"移除掉,比如:subprojects { afterEvaluate { project -> if (project.hasProperty("kotlinOptions")) { project.kotlinOptions.freeCompilerArgs -= "-Werror" } } }不过这个方法只是临时方案,长期来看还是建议处理掉警告本身。
直接修复插件代码:
找到项目根目录下的node_modules/@react-native/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt文件,定位到第97行,把里面的安全调用?.改成普通的.调用就行。因为Jvm!本身是非空类型,完全不需要安全调用。改完之后重新执行构建命令,应该就能正常通过了。等待官方修复:
如果不想手动修改依赖包代码,可以关注React Native的官方更新,看看有没有针对这个问题的修复补丁,等官方发布新版本的gradle插件后,直接升级就能解决。
备注:内容来源于stack exchange,提问作者MikeL
相关产品推荐
相关产品推荐

