4

我想设置依赖于 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键:

version      := Versioning.projectVersion.value

但这是被禁止的:

BuildSettings.scala:15: A setting cannot depend on a task

这样做的正确方法是什么?

4

1 回答 1

0

我不确定您是否可以在不将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
}

在 master 中运行sbt version会给出简短版本,在其他分支中运行会给出过时版本。

于 2013-09-03T11:40:55.447 回答