设置sbt以基于git branch发布到artifactory

时间:2016-05-10 16:22:37

标签: git sbt artifactory sbt-assembly

我想设置一个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")                             
}                  

但这会产生“错误:设置不能依赖于任务”。

1 个答案:

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