В мультипроекте Gradle охватываются SourceSets подпроекта?

У меня есть два подпроекта Gradle, которые используют java-плагин. Он определяет типичные основные, тестовые и т. д. исходные наборы.

Выходные данные этой задачи кажутся наложенными. Я ожидал увидеть исходный набор для каждого подпроекта. Охватывает ли Gradle SourceSet, используя имя подпроекта, или это одна глобальная коллекция? Как вы ссылаетесь на исходный набор в проекте A?

task report {
 doLast{
    sourcesets.findAll().each { srcset ->
        println srcset.name
        println "src: " srcset.java.srcDirs
    }
  }
}

person Vortex    schedule 20.01.2020    source источник
comment
В файле gradle вызовы методов неявно используются для объекта проекта, что означает, что отчет о задаче {...} эквивалентен project.task('report', {}), где проект относится к данному подпроекту, к которому относится gradle. файл принадлежит. Внутри замыканий, таких как doLast, объект контекста обычно также является проектом. Таким образом, sourceSets, обратитесь к sourceSets данного подпроекта, в build.gradle которого вы используете этот фрагмент. Ссылка на другие подпроекты может быть возможна, но нарушает гигиену сборки и может иметь нежелательные последствия.   -  person tkruse    schedule 20.01.2020
comment
@tkruse, спасибо   -  person Vortex    schedule 20.01.2020