Разница между добавлением задачи непосредственно в подпроект и «подпроектами» из корневого проекта - PullRequest
0 голосов
/ 09 апреля 2019

У меня проблема с получением пустого массива при доступе к конфигурациям в подпроектах

У меня есть gradle-проект (версия gradle 5.3.1) со структурой, как показано ниже

Gradle-Test
|
|-subproject1
|    |-build.gradle
|
|-subproject2
|    |-build.gradle
|
|-build.gradle
|-settings.gradle 

В настройках.gradle

rootProject.name = 'Gradle-Test'
include 'subproject1', 'subproject2'

В файле build.gradle в подпроектах определяет только зависимости, как показано ниже

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
}

Поскольку я хочу получить зависимости подпроектов, я добавляю задачи в build.gradleв корневом проекте, как показано ниже

allprojects.each { p ->
    configure(p) {
        task showConfig {
            println p.name
            println p.configurations
        }
    }
}

Однако, когда я запускаю ./gradlew showConfig, я получаю

> Configure project :
Gradle-Test
[configuration ':annotationProcessor', configuration ':apiElements', configuration ':archives', configuration ':compile', configuration ':compileClasspath', configuration ':compileOnly', configuration ':default', configuration ':implementation', configuration ':runtime', configuration ':runtimeClasspath', configuration ':runtimeElements', configuration ':runtimeOnly', configuration ':testAnnotationProcessor', configuration ':testCompile', configuration ':testCompileClasspath', configuration ':testCompileOnly', configuration ':testImplementation', configuration ':testRuntime', configuration ':testRuntimeClasspath', configuration ':testRuntimeOnly']
subproject1
[]
subproject2
[]

BUILD SUCCESSFUL in 0s

Я не могу получить конфигурации подпроектов, которые возвращают пустой массив

Я ожидал получить результат, как показано ниже

> Configure project :
Gradle-Test
[configuration ':annotationProcessor', configuration ':apiElements', configuration ':archives', configuration ':compile', configuration ':compileClasspath', configuration ':compileOnly', configuration ':default', configuration ':implementation', configuration ':runtime', configuration ':runtimeClasspath', configuration ':runtimeElements', configuration ':runtimeOnly', configuration ':testAnnotationProcessor', configuration ':testCompile', configuration ':testCompileClasspath', configuration ':testCompileOnly', configuration ':testImplementation', configuration ':testRuntime', configuration ':testRuntimeClasspath', configuration ':testRuntimeOnly']

> Configure project :subproject1
subproject1
[configuration ':subproject1:annotationProcessor', configuration ':subproject1:apiElements', configuration ':subproject1:archives', configuration ':subproject1:compile', configuration ':subproject1:compileClasspath', configuration ':subproject1:compileOnly', configuration ':subproject1:default', configuration ':subproject1:implementation', configuration ':subproject1:runtime', configuration ':subproject1:runtimeClasspath', configuration ':subproject1:runtimeElements', configuration ':subproject1:runtimeOnly', configuration ':subproject1:testAnnotationProcessor', configuration ':subproject1:testCompile', configuration ':subproject1:testCompileClasspath', configuration ':subproject1:testCompileOnly', configuration ':subproject1:testImplementation', configuration ':subproject1:testRuntime', configuration ':subproject1:testRuntimeClasspath', configuration ':subproject1:testRuntimeOnly']

> Configure project :subproject2
subproject2
[configuration ':subproject2:annotationProcessor', configuration ':subproject2:apiElements', configuration ':subproject2:archives', configuration ':subproject2:compile', configuration ':subproject2:compileClasspath', configuration ':subproject2:compileOnly', configuration ':subproject2:default', configuration ':subproject2:implementation', configuration ':subproject2:runtime', configuration ':subproject2:runtimeClasspath', configuration ':subproject2:runtimeElements', configuration ':subproject2:runtimeOnly', configuration ':subproject2:testAnnotationProcessor', configuration ':subproject2:testCompile', configuration ':subproject2:testCompileClasspath', configuration ':subproject2:testCompileOnly', configuration ':subproject2:testImplementation', configuration ':subproject2:testRuntime', configuration ':subproject2:testRuntimeClasspath', configuration ':subproject2:testRuntimeOnly']

BUILD SUCCESSFUL in 0s

, то есть, добавив ниже задачу в каждом билде. Gradle

task showConfig {
    println project.name
    println project.configurations
}

Может кто-нибудь научить меня, что пошло не так в моем gradle?

1 Ответ

0 голосов
/ 09 апреля 2019

Вы положили свои отпечатки в неправильном месте.Они запускаются в фазе конфигурации, а не в фазе выполнения.

См. фазы сборки

Например: try

task showConfig {
   doLast {
      println p.name
      println p.configurations
   }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...