Gradle Kotlin DSL 替换令牌
Gradle Kotlin DSL Replace Token
在我的代码中有 const val VERSION = $version
.
我想用 build.gradle.kts
.
中的真实版本字符串替换 $version
我该怎么做?
工作示例here。
一种方法是使用模板文件(存储在 src
树之外)。我们称它为 TemplateVersion.kt
:
class Version() {
val version = "__VERSION";
}
然后在 build.gradle.kts
中,作为 compileKotlin
任务的初始部分,我们从 TemplateVersion.kt
:
生成 Version.kt
val sourceFile = File(rootDir.absolutePath + "/resources/TemplateVersion.kt")
val propFile = File(rootDir.absolutePath + "/gradle.properties")
val destFile = File(rootDir.absolutePath + "/src/main/kotlin/${targetPackage}/Version.kt")
tasks.register("generateVersion") {
inputs.file(sourceFile)
inputs.file(propFile)
outputs.file(destFile)
doFirst {
generateVersion()
}
}
tasks.named("compileKotlin") {
dependsOn("generateVersion")
}
fun generateVersion() {
val version: String by project
val rootDir: File by project
val inputStream: InputStream = sourceFile.inputStream()
destFile.printWriter().use { out ->
inputStream.bufferedReader().forEachLine { inputLine ->
val newLine = inputLine.replace("__VERSION", version)
out.println(newLine)
}
}
inputStream.close()
}
其中 gradle.properties
是:
version=5.1.50
向 Version.kt
添加更多字段非常容易,例如构建时间戳。
(编辑: 这已更新为适当的 generateVersion
任务,该任务将检测对 gradle.properties
的更改。compileKotlin
任务将调用此任务)。
在我的代码中有 const val VERSION = $version
.
我想用 build.gradle.kts
.
中的真实版本字符串替换 $version
我该怎么做?
工作示例here。
一种方法是使用模板文件(存储在 src
树之外)。我们称它为 TemplateVersion.kt
:
class Version() {
val version = "__VERSION";
}
然后在 build.gradle.kts
中,作为 compileKotlin
任务的初始部分,我们从 TemplateVersion.kt
:
Version.kt
val sourceFile = File(rootDir.absolutePath + "/resources/TemplateVersion.kt")
val propFile = File(rootDir.absolutePath + "/gradle.properties")
val destFile = File(rootDir.absolutePath + "/src/main/kotlin/${targetPackage}/Version.kt")
tasks.register("generateVersion") {
inputs.file(sourceFile)
inputs.file(propFile)
outputs.file(destFile)
doFirst {
generateVersion()
}
}
tasks.named("compileKotlin") {
dependsOn("generateVersion")
}
fun generateVersion() {
val version: String by project
val rootDir: File by project
val inputStream: InputStream = sourceFile.inputStream()
destFile.printWriter().use { out ->
inputStream.bufferedReader().forEachLine { inputLine ->
val newLine = inputLine.replace("__VERSION", version)
out.println(newLine)
}
}
inputStream.close()
}
其中 gradle.properties
是:
version=5.1.50
向 Version.kt
添加更多字段非常容易,例如构建时间戳。
(编辑: 这已更新为适当的 generateVersion
任务,该任务将检测对 gradle.properties
的更改。compileKotlin
任务将调用此任务)。