我想设置依赖于 git 分支的项目版本,在开发版本中有一个当前的主要版本 + 当前日期,在生产中只有主要版本。所以我做了一个计算我需要的版本的任务:
val projectVersion = taskKey[String]("Compute project version")
projectVersion := {
val v = version.value // get Major version number
val date = new SimpleDateFormat("yyyyMMdd").format(new Date)
if (isDev.value) v + "-" + date
else v
}
isDev
是另一个返回 Task[Boolean]
的任务表明这是一个非主分支:branch := Process("git rev-parse --abbrev-ref HEAD").lines.headOption
isDev := branch.value != "master"
然后我尝试将计算版本设置为
version
key :version := Versioning.projectVersion.value
但这是禁止的:
BuildSettings.scala:15: A setting cannot depend on a task
这样做的正确方法是什么?
最佳答案
我不确定您是否可以在不将 TaskKey 更改为 SettingKey 的情况下解决此问题。
然而有已经是插件 它为您提供了大部分所需:sbt-git
我尝试了以下操作:在 project/plugins.sbt
:
addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.6.2")
然后
build.sbt
看起来像这样:name := "Foo"
git.baseVersion := "1.0"
version := {
val branch = git.gitCurrentBranch.value
val isDev = branch != "master"
val v = git.baseVersion.value
val date = new java.text.SimpleDateFormat("yyyyMMdd").format(new java.util.Date)
if (isDev) v + "-" + date
else v
}
运行
sbt version
在 master 中给出了简短版本,在其他分支中运行给出了过时的版本。
关于scala - 从 taskKey 设置项目版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18586406/