【发布时间】: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