лучшее выражение gradle для выполнения fileTrees.add () для всех подпроектов - PullRequest
0 голосов
/ 09 марта 2019

Чтобы настроить SpotBugs на файл Android build.gradle, приведенное ниже выражение кажется очень неэффективным.
Я не очень хорош в отличном сценарии, но может быть лучший способ сделать это.

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 относится к исходному коду плагина Grab SpotBugs

Мое испытание, как показано ниже;

    // 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 () применимо для типов аргументов: () значения: []

Я знал, почему это дает такую ​​ошибку, но я не мог представить, как исправить это правильно. Как мне этого добиться?

1 Ответ

0 голосов
/ 10 марта 2019

Предполагая, что у SpotBugsTask есть метод setClasses (FileCollection), который вы можете сделать

tasks.withType(com.github.spotbugs.SpotBugsTask) {
   List<File> dirs = subprojects.collect { it.file("${it.buildDir}/intermediates/classes") } 
   classes = files(dirs) 
} 

См. Отличные документы для итерации по списку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...