build.sbt使用任务更改设置

build.sbt使用任务更改设置,sbt,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

简短总结:我想使用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
不会更改其值。我学会了。
publishTo
是设置键吗?以后没有办法改变目标吗


背景:

我们希望我们的服务器在任何提交和发布标签上构建快照。我们希望它发布到两个不同的存储库。快照放在一个中,发布在另一个中。有没有办法更改isSnapshot配置

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

  • sbt设置快照发布
  • sbt设置发布发布
setRelease
setSnapshot
将设置相应的目的地

  • sbt发布
或者,如果可以只使用publish,然后检查“isSnapshot”是否为
true
false
,然后在一个或另一个存储库中发布。然而,我甚至还没有弄清楚如何修改isSnapshot,而不去碰
build.sbt
-文件本身

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


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

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")
}

请参见此处了解更多详细信息:

我所寻找的内容与前面提到的类似

isSnapshot
可以手动设置:

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

此外,正如lev提到的,版本可以设置isSnapshot设置。这基本上导致了相同的解决方案(但这是我缺少的部分)

当将版本号设置为包含关键字
快照
(请不要区分大小写)的内容时,将生成快照

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

谢谢@lev的建议。我看到了那篇文章,但是我不知道如何设置isSnapshot.value-您可以详细说明如何配置它(可能没有在build.sbt中硬编码),或者您会使用多个项目配置吗?
isSnapshot
已经存在于sbt中。您可以在这里看到定义:这就是它的初始化方式:因此示例中的代码应该按原样工作
sbt 'set version := "1.0-SNAPSHOT"' isSnapshot
> ..
> true