设置 sbt 发布到基于 git 分支的人工制品
Setting up sbt to publish to artifactory based on git branch
我想建立一个 sbt 项目,以便它可以发布到基于 (git) 分支的正确的工件存储库。
为 提出的解决方案建议在 build.sbt 文件中对存储库进行硬编码。
但是,我希望主分支发布到 "releases",另一个分支发布到 "snapshots",使用相同的 build.sbt 文件。
理想情况下,我想要以下内容:
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")
}
但这会产生 "error: A setting cannot depend on a task"。
一个近似的解决方案是使用 sbt-release
插件,然后使用 isSnapshot
(这是一个设置)以便 select 存储库。
原问题的解决方法是简单地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")
}
我想建立一个 sbt 项目,以便它可以发布到基于 (git) 分支的正确的工件存储库。
为
但是,我希望主分支发布到 "releases",另一个分支发布到 "snapshots",使用相同的 build.sbt 文件。
理想情况下,我想要以下内容:
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")
}
但这会产生 "error: A setting cannot depend on a task"。
一个近似的解决方案是使用 sbt-release
插件,然后使用 isSnapshot
(这是一个设置)以便 select 存储库。
原问题的解决方法是简单地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")
}