我想设置一个sbt项目,以便它可以基于(git)分支发布到适当的神器库。
为this question建议的解决方案建议在build.sbt文件中对存储库进行硬编码。
但是,我希望master分支发布到“releases”,并使用相同的build.sbt文件发布到“snapshots”的另一个分支。
理想情况下,我想要以下内容:
val gitBranch = taskKey[String]("Determines current git branch")
gitBranch := Process("git rev-parse --abbrev-ref HEAD").lines.head
publishTo := {
val myArtifactory = "http://some.where/"
if (gitBranch.value == "master")
Some("releases" at myArtifactory + "releases")
else
Some("snapshots" at myArtifactory + "snapshots")
}
但这会产生“错误:设置不能依赖于任务”。
答案 0 :(得分:4)
一个近乎解决方案是使用sbt-release
插件,然后使用isSnapshot
(这是一个设置)来选择存储库。
原始问题的解决方案是简单地设置gitBranch
设置:
val gitBranch = settingKey[String]("Determines current git branch")
而不是
val gitBranch = taskKey[String]("Determines current git branch")
请注意,设置仅在sbt会话开始时计算一次,因此如果会话中存在任何分支切换,则不适合。
因此,整个代码片段将变为:
val gitBranch = settingKey[String]("Determines current git branch")
gitBranch := Process("git rev-parse --abbrev-ref HEAD").lineStream.head
publishTo := {
val myArtifactory = "http://some.where/"
if (gitBranch.value == "master")
Some("releases" at myArtifactory + "releases")
else
Some("snapshots" at myArtifactory + "snapshots")
}