build.sbt更改任务设置

时间:2018-10-13 17:50:37

标签: sbt

简短摘要:我想通过sbt任务更改默认的publishTo,但仅在某些情况下。我正在尝试做类似的事情:

val setSnapshot = taskKey[Unit]("changeRepo")

setSnapshot := {
  System.out.println(publishTo.value)
  publishTo in ThisBuild := Some("test" at "snapshot.myrepository")
  System.out.println(publishTo.value)
}

name := "Hello"
version := "1.0"
scalaVersion := "2.10.2"

publishTo in ThisBuild := Some("test" at "release.myrepository")

但是,publishTo不会改变其值。我学会了that setting keys are assigned only oncepublishTo是设置键吗?以后没有办法更改目标吗?


上下文:

我们希望我们的服务器在任何提交和标签发布上构建快照。我们希望它发布到两个不同的存储库。快照合而为一,然后再发布。有没有办法改变isSnapshot的配置?

理想情况下,我们希望为CI运行器提供可以运行的不同命令,例如:

  • sbt setSnapshot publish
  • sbt setRelease publish

setReleasesetSnapshot将设置相应的目的地。

  • sbt publish
  

或者可以只使用发布,然后检查“ isSnapshot”是true还是false,然后在一个或另一个存储库中发布。但是,我什至没有想出如何在不触摸build.sbt文件本身的情况下修改isSnapshot。

我已经阅读了一些build.sbt文档,但是我还没有找到正确的页面...

我是从完全错误的角度来解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

sbt文档中有一个示例,说明如何发布到单独的快照存储库:

publishTo := {
  val nexus = "https://my.artifact.repo.net/"
  if (isSnapshot.value)
    Some("snapshots" at nexus + "content/repositories/snapshots") 
  else
    Some("releases"  at nexus + "service/local/staging/deploy/maven2")
}

有关更多详细信息,请参见此处:https://www.scala-sbt.org/1.x/docs/Publishing.html#Define+the+repository

答案 1 :(得分:0)

我正在寻找的东西就像提到的here

可以手动设置

isSnapshot

sbt 'set isSnapshot := true' isSnapshot
> ..
> true

此外,随着lev的出现,该版本可以设置isSnapshot设置。基本上可以得到相同的解决方案(但这是我缺少的部分)。

sbt 'set version := "1.0"' isSnapshot
> ..
> false

在将版本号设置为包含关键字SNAPSHOT的内容时(请注意区分大小写)会生成快照

sbt 'set version := "1.0-SNAPSHOT"' isSnapshot
> ..
> true