当无法下载用于构建插件的Git存储库时,SBT会静默终止

时间:2018-08-24 20:58:48

标签: sbt

当无法从Git存储库通过SSH下载插件时,

SBT是静默地失败。

这是尝试下载存储库时SBT的输出:

[info] Updating ProjectRef(uri("ssh://git@repository.com/plugin.git"), "plugin")...
# (nothing after that line)

它随后在没有解释的情况下终止。这很可能是SBT通过SSH从Git存储库通过SSH下载插件的错误。

成功下载插件后,将打印以下行:

[info] Done updating.

因此,出于某种原因,即使是这样执行,SBT也没有说明出了什么问题:

sbt -Xdebug test

以下是相关的配置文件:

# project/build-properties
sbt.version=1.1.5

# project/plugins.sbt
lazy val buildPlugin = RootProject(uri("ssh://git@repository.com/plugin.git"))
lazy val root        = (project in file(".")).dependsOn(buildPlugin)

问题:

1。如何获得SBT来打印更多调试信息?

2。我可以在SBT代码的哪里修复此错误?

3。如何构建和使用自己的SBT版本?

1 个答案:

答案 0 :(得分:0)

  
      
  1. 如何获取SBT以打印更多调试信息?
  2.   

使用https://www.scala-sbt.org/download.html(截至2018年8月为1.2.1)中提供的最新启动脚本,您可以运行:

$ sbt -debug
  
      
  1. 我可以在SBT代码中的哪个位置修复此错误?
  2.   

https://github.com/sbt/sbt/issues/1120#issuecomment-415553592处查看我的答案:

以下是一些相关代码:

  val git: Resolver = (info: ResolveInfo) => {
    val uri = info.uri.withoutMarkerScheme
    val localCopy = uniqueSubdirectoryFor(uri.copy(scheme = "git"), in = info.staging)
    val from = uri.withoutFragment.toASCIIString

    if (uri.hasFragment) {
      val branch = uri.getFragment
      Some { () =>
        creates(localCopy) {
          run("git", "clone", from, localCopy.getAbsolutePath)
          run(Some(localCopy), "git", "checkout", "-q", branch)
        }
      }
    } else
      Some { () =>
        creates(localCopy) {
          run("git", "clone", "--depth", "1", from, localCopy.getAbsolutePath)
        }
      }
  }

....

  def creates(file: File)(f: => Unit) = {
    if (!file.exists)
      try {
        f
      } catch {
        case NonFatal(e) =>
          IO.delete(file)
          throw e
      }
    file
  }
  
      
  1. 如何构建和使用自己的SBT版本?
  2.   

https://github.com/sbt/sbt/blob/1.x/CONTRIBUTING.md#build-from-source

为此,您只需要sbt / sbt和publishLocal