Appearance
自动化版本号管理
从 Git Tag 读取版本
kotlin
// build.gradle.kts
fun getVersionFromGit(): String {
return try {
val process = ProcessBuilder("git", "describe", "--tags", "--always", "--dirty")
.directory(rootProject.projectDir)
.start()
process.inputStream.bufferedReader().readText().trim()
} catch (e: Exception) {
"0.0.0-unknown"
}
}
// 或者使用 Provider(懒加载,推荐)
val versionFromGit = providers.exec {
commandLine("git", "describe", "--tags", "--always")
}.standardOutput.asText.map { it.trim() }
version = versionFromGit.orElse("0.0.0-SNAPSHOT").get()使用 axion-release 插件
kotlin
plugins {
id("pl.allegro.tech.build.axion-release") version "1.17.0"
}
scmVersion {
tag {
prefix.set("v") // tag 格式:v1.0.0
}
versionCreator("versionWithBranch") // 非主分支加入分支名
branchVersionCreator.put("main", "default")
branchVersionCreator.put("develop", "versionWithBranch")
}
// 从 SCM 读取版本
version = scmVersion.versionbash
# 查看当前版本
./gradlew currentVersion
# 发布(打 tag 并推送)
./gradlew release
# 只打 tag,不推送
./gradlew release -Prelease.dryRun使用 nebula-release 插件
kotlin
plugins {
id("nebula.release") version "19.0.2"
}bash
# 发布候选版
./gradlew candidate
# 发布正式版
./gradlew final
# 发布快照版
./gradlew snapshot版本文件管理
kotlin
// 从 version.properties 读取版本
val versionProps = Properties()
file("version.properties").inputStream().use { versionProps.load(it) }
version = "${versionProps["major"]}.${versionProps["minor"]}.${versionProps["patch"]}"
// 自动递增小版本
tasks.register("bumpVersion") {
doLast {
val patch = (versionProps["patch"] as String).toInt() + 1
versionProps["patch"] = patch.toString()
file("version.properties").writer().use { versionProps.store(it, null) }
println("Version bumped to ${versionProps["major"]}.${versionProps["minor"]}.$patch")
}
}下一步
- 代码质量门禁 - 质量检查配置