替换compile为implementation引入fileTree导致复制库任务异常
解决Gradle迁移中
copyToLib任务无法复制implementation依赖的问题 嘿,这个问题我之前帮同事排查过,核心是Gradle新版本对依赖配置做了关键重构,咱们一步步理清楚:
为什么原来的配置失效了?
Gradle 5.x及以后彻底重构了依赖配置体系,老的compile、runtime配置被标记为废弃,取而代之的是implementation、api、runtimeOnly这类职责更清晰的配置。原来的configurations.runtime现在只会包含runtimeOnly声明的依赖,不会再自动纳入implementation里的内容——这就是你替换成implementation后,任务找不到本地jar的根本原因。正确的解决方案
你需要用configurations.runtimeClasspath替代原来的configurations.runtime。这个配置是Gradle专门用来收集所有运行时所需依赖的集合,会自动包含implementation、api、runtimeOnly等配置下的所有依赖,完美匹配你原来的需求。
修改后的任务代码如下:
task copyToLib(type: Copy) { from configurations.runtimeClasspath into "$buildDir/output/lib" }
- 可选:精准过滤本地依赖
如果只想复制libs目录下的本地jar,不想把远程仓库的依赖也复制进去,可以给配置加个过滤规则:
task copyToLib(type: Copy) { from configurations.runtimeClasspath.filter { file -> file.path.contains("libs") // 匹配本地libs目录下的文件 } into "$buildDir/output/lib" }
最后执行任务验证:在终端运行./gradlew copyToLib(Windows系统用gradlew.bat copyToLib),去build/output/lib目录下看看,你的本地依赖jar应该已经被正确复制过去了。
内容的提问来源于stack exchange,提问作者elect
相关产品推荐
相关产品推荐

