已替换Gradle中所有compile为implementation仍有警告,求排查遗漏项
我来帮你梳理一下可能遗漏的地方,毕竟把compile全换成implementation后还出警告,大概率是某些角落没覆盖到:
检查所有子模块的build.gradle文件
很多多模块项目容易只改主模块,却忘了子模块里的依赖声明。逐个打开每个module目录下的build.gradle,仔细检查dependencies块里有没有漏网的compile。排查根目录的全局依赖配置
如果项目用了BOM依赖管理(比如Spring Boot的dependencyManagement),根目录的build.gradle里可能有全局的依赖声明块,里面说不定还藏着compile,要把这些也替换成implementation。留意动态依赖或变量中的compile
有些项目会把依赖定义在ext变量里,比如:ext { commonsLang = "compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'" }然后在
dependencies里直接引用这个变量。这种情况要把变量里的compile改成implementation,不然引用的时候还是会用旧的配置。不要忘记测试相关的依赖配置
testCompile和androidTestCompile(Android项目)也都被废弃了,要对应换成testImplementation和androidTestImplementation。很多人只替换主代码的compile,测试部分的依赖经常被忽略,这也是警告的常见来源。检查自定义Gradle脚本或插件
如果项目里用了自定义插件,或者通过apply from: 'xxx.gradle'引入了外部脚本,这些文件里可能也有compile声明,一定要打开检查替换。清理缓存并重新同步
有时候Gradle的缓存会导致警告残留,先执行命令:./gradlew clean # Linux/Mac gradlew clean # Windows然后在IDE里点击“Sync Project with Gradle Files”按钮,确保所有修改都生效。
确认Gradle版本是否兼容
implementation是在Gradle 3.4版本引入的,如果你的Gradle版本过低(比如低于4.6),可能会出现兼容性问题。建议升级到较新的稳定版(比如7.x或8.x系列),Android项目还要注意Android Gradle Plugin版本和Gradle版本的匹配。
内容的提问来源于stack exchange,提问作者hakim

