mit*_*hus 8 git artifactory sbt sbt-assembly
我想建立一个sbt项目,以便它可以基于(git)分支发布到适当的神器库.
针对此问题提出的解决方案建议在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")
}
Run Code Online (Sandbox Code Playgroud)
但这会产生"错误:设置不能依赖于任务".
一种解决方案是使用sbt-release插件,然后使用isSnapshot(这是一种设置)来选择存储库。
解决原始问题的方法是简单地进行gitBranch设置:
val gitBranch = settingKey[String]("Determines current git branch")
Run Code Online (Sandbox Code Playgroud)
代替
val gitBranch = taskKey[String]("Determines current git branch")
Run Code Online (Sandbox Code Playgroud)
请注意,设置仅在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")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |