scala - 如何更改 SBT 命令中的设置?

标签 scala sbt

我想要一个命令 publish-snapshot 来运行带有修改后的 version 设置的 publish 任务(该设置将被计算在执行命令时)。

我想出了如何在命令中获取 version 的当前值,Project.runTask("task", "scope", ...) 似乎成为调用 publish 任务的正确调用。

唯一让我感到困惑的是如何使用新版本值修改 State 实例。我所有的尝试似乎都对原始版本设置没有任何影响。

我最后一次尝试:

val printVers = TaskKey[Unit]("printvers")
val printVersTask = TaskKey[Unit]("printvers") <<= {version map println}

def publishSnapshot = Command.command("publish-snapshot") { state =>
  val newState = SessionSettings.reapply(state.get(sessionSettings).get.appendRaw(version := "???"), state)
  Project.runTask(printVers in Compile, newState, true)

  state
}

lazy val root = Project("main", file("."),
                        settings =
                          Defaults.defaultSettings ++
                          Seq(printVersTask)).settings(commands += publishSnapshot)

有什么方法可以解决这个问题吗?

最佳答案

sbt 邮件列表的帮助下,我能够创建如下解决方案:

def publishSnapshot = Command.command("publish-snapshot") { state =>
  val extracted = Project extract state
  import extracted._
  val eVersion = getOpt(version).get // getting current version
  runTask(publish in Compile,
    append(Seq(version := "newVersion"), state),
    true
  )
  state
}

关于scala - 如何更改 SBT 命令中的设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18821534/

相关文章:

sbt - 如何知道 sbt 中已安装插件的可用任务和设置?

scala - Mixin 类型约束仍然可以编译

excel - 带有空主体的 HTTP GET 响应,在 IE 中下载了 excel 文档

scala - 使用 json4s 时如何设置 Jackson 解析器功能?

scala - Akka Actor : Remote actor exception "Futures timed out after"

postgresql - 如何使用maven在spark中包含jdbc jar

scala - 从 DataFrame 中选择列时 $ 符号如何工作?

intellij-idea - 没有本地发布的 Intellij Idea 中的共享 SBT 模块

scala - 如何解决 sbt 中的非 jar (dll/jnilib) 库依赖关系?

构建我的 Play 应用程序时未找到 Hadoop 版本