scala - 从 taskKey 设置项目版本

标签 scala versioning sbt

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

相关文章:

scala - 如何在 Actor 中停止 Source.tick?

scala - 为什么 Doobie 使用免费 monad?

sbt - 我可以将 sbt 的 `apiMappings` 设置用于托管依赖项吗?

java - 使用 Spark 连接 MariaDB 时出现 ClassNotFoundException

scala - Akka 流批处理

scala - 在scala中,如何指示编译器实现两个抽象类型的等价?

android - 我可以从 alpha 测试 channel 获得较低版本的代码吗

ruby-on-rails - Rails 中优雅的 API 版本控制

android - 如何在Android中设置builtNumber

scala - 如何在 Sublime Text 3 中构建 Scala 应用程序?