我的 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
它,它將進入子專案并做任何它需要做的事情。但我想不出正確的方法來做到這一點。
我試過的:
在專案之間簡單共享工件之后,我嘗試向 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.
uj5u.com熱心網友回復:
您需要直接在子專案構建腳本中添加傳出工件,而不是在任務配置中(僅延遲運行)。builtBy
如果您使用的RegularFileProperty
是工件,您也不需要。
val localizationData by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = false
}
artifacts {
add("localizationData", tasks.tokenizeStrings.get().outputTokensCsvFile)
}
訣竅是用來get
繞過懶惰的任務創建。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517626.html
標籤:毕业典礼
上一篇:為什么Gradle不下載依賴項?
下一篇:AndroidStudio中的Gradle同步問題:intellij.openapi.progress.Task-相等的物件必須具有相等的哈希碼