【问题标题】:Difference between adding task directly in subproject and by 'subprojects' from root project直接在子项目中添加任务和通过根项目中的“子项目”添加任务之间的区别
【发布时间】:2019-04-09 05:59:13
【问题描述】:

访问子项目中的配置时出现空数组的问题

我有一个 gradle 项目(gradle 版本 5.3.1),结构如下

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

在settings.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

,即在每个 build.gradle 中添加以下任务

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

谁能教我我的 gradle 出了什么问题?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    你把你的 println 放在了错误的地方。它们在配置阶段而不是执行阶段触发。

    build phases

    例如:尝试

    task showConfig {
       doLast {
          println p.name
          println p.configurations
       }
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 2012-12-03
      • 2018-10-12
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      相关资源
      最近更新 更多