【问题标题】:How to set gradle subproject artifact as task input?如何将 gradle 子项目工件设置为任务输入?
【发布时间】:2022-10-14 21:18:25
【问题描述】:

我的 gradle 构建有一个子项目,其中包含一个生成文件的任务

$ ./gradlew :strings:tokenizeStrings # creates strings/string_tokens.csv

然后在我的根项目中,我有一个使用该文件的任务

tasks.generateLocalizationFiles {
    inputTokensCsvFile.set(layout.projectDirectory.file("strings/string_tokens.csv"))
}

这行得通,但由于 gradle 不知道依赖关系,它只有在我以正确的顺序手动运行这两个任务时才有效

$ ./gradlew :strings:tokenizeStrings
$ ./gradlew :generateLocalizationFiles

我想向 gradle 添加适当的依赖项,以便我可以只运行:generateLocalizationFiles,它将进入子项目并执行它需要的任何操作。但我想不出正确的方法来做到这一点。

我试过的:

Simple sharing of artifacts between projects 之后,我尝试向 suproject 构建脚本添加一个消耗性配置

val localizationData by configurations.creating {
    isCanBeConsumed = true
    isCanBeResolved = false
}

tasks.tokenizeStrings {
    artifacts {
        add("localizationData", outputTokensCsvFile) {
            builtBy(this)
        }
    }
}

然后是可解析的配置加上对根项目构建脚本的依赖

val localizedStringData by configurations.creating {
    isCanBeConsumed = false
    isCanBeResolved = true
}

// hook up our resolvable configuration to the strings' consumable configuration
dependencies {
    localizedStringData(project(mapOf(
        "path" to ":strings",
        "configuration" to "localizationData")
    ))
}

tasks.generateLocalizationFiles {
    dependsOn(localizedStringData)
    inputTokensCsvFile.set(localizedStringData.singleFile)
}

但这失败了,似乎是因为未填充消耗品配置?

Caused by: java.lang.IllegalStateException: Expected configuration ':localizedStringData' to contain exactly one file, however, it contains no files.

【问题讨论】:

    标签: gradle


    【解决方案1】:

    您需要直接在子项目构建脚本中添加传出工件,而不是在任务配置中(仅延迟运行)。如果您使用RegularFileProperty 作为工件,您也不需要builtBy

    val localizationData by configurations.creating {
        isCanBeConsumed = true
        isCanBeResolved = false
    }
    
    artifacts {
        add("localizationData", tasks.tokenizeStrings.get().outputTokensCsvFile)
    }
    

    诀窍是使用get 绕过惰性任务创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多