Gradle Kotlin DSL替换令牌



在我的代码中有const val VERSION = $version
我想用build.gradle.kts中的真实版本字符串替换$version
我该怎么做?

这里的工作示例。

一种方法是使用模板文件(存储在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任务将调用此任务(。

最新更新