android - 更好的 gradle 表达式为所有子项目执行 fileTrees.add()
问题描述
要将SpotBugs配置为 Androidbuild.gradle
文件,下面的表达式似乎非常无效。
我不擅长 groovy 脚本,但可能有更好的方法。
tasks.withType(com.github.spotbugs.SpotBugsTask) {
classes = fileTree("${project.buildDir}/intermediates/classes")
.plus(fileTree("${rootProject.rootDir}/../subproject-one/app/build/intermediates/classes"))
.plus(fileTree("${rootProject.rootDir}/../subproject-two/app/build/intermediates/classes"))
.plus(fileTree("${rootProject.rootDir}/../subproject-three/app/build/intermediates/classes"))
}
实际上,所有子项目fileTree
目标都是${project.buildDir}/intermediates/classes
.
左边classes
是org.gradle.api.file.FileCollection
类型参考SpotBugs gradle 插件源代码
我的试验如下;
// not working
classes = rootProject.subprojects.collect({
proj -> fileTree("${proj.buildDir}/intermediates/classes") })
.stream().asType(org.gradle.api.file.FileCollection.class)
它给出了以下错误;
无法确定任务 ':app:spotbugsMain' 的依赖关系。
> 没有方法签名:java.util.stream.ReferencePipeline$Head.getBuildDependencies() 适用于参数类型:() 值:[]
我知道它为什么会出现这样的错误,但我无法想象如何正确修复它。我怎样才能实现它?
解决方案
假设 SpotBugsTask 有一个你可以做的 setClasses(FileCollection) 方法
tasks.withType(com.github.spotbugs.SpotBugsTask) {
List<File> dirs = subprojects.collect { it.file("${it.buildDir}/intermediates/classes") }
classes = files(dirs)
}
请参阅 groovy 文档以迭代列表
推荐阅读
- r - 将df向量分配给闪亮的renderPlot中的变量
- archlinux - 在多台显示器上使用 mpv 作为视频背景
- azure - 从单体应用切换到微服务需要并发用户的阈值?
- odoo-14 - Odoo 电子邮件营销(mass_mailing)安装失败:系统中找不到外部 ID:mass_mailing.model_mailing_list
- jinja2 - 如何在jinja中迭代列表字典
- excel - 是否可以使用公式在跳过选定单元格上方和下方的数组中找到最大值(中间)
- asp.net - 我的 .net framework 4.8 应用程序是否可以在 windows server .net framework 4.5 上运行?
- android - 使用 Facebook 登录时无法切换帐户
- firebase - 我正在尝试使用 Provider 和 Firebase 流式传输模型列表,并将字段值设置为我的应用程序中的另一个模型
- npm - GitLab-CE 13.7.4:NPM 发布 404 Not Found - PUT