SBT SFTP 解析器不够努力

Posted

技术标签:

【中文标题】SBT SFTP 解析器不够努力【英文标题】:SBT SFTP resolver not trying hard enough 【发布时间】:2015-02-16 12:39:28 【问题描述】:

我正在将我们的混合构建环境转换为基于 sbt 的生态系统。我在这个问题上有点障碍。

我已经通过 sftp 将一个库部署到远程存储库,但是当我尝试将其作为依赖项加载时,我遇到了问题。

在 build.sbt 我有:

resolvers += 
  val privateKeyFile = new java.io.File(sys.env("HOME") + "/.ssh/id_rsa")
  Resolver.sftp("MY REPO", "aHost", "/repoBase/") as ("aUser", privateKeyFile)

互动节目更新:

[info] Resolving com.test.it.out#myLib_2.11;1.0 ...
[warn]  module not found: com.test.it.out#myLib_2.11;1.0
[warn] ==== local: tried
[warn]   /home/bday/.ivy2/local/com.test.it.out#myLib_2.11/1.0/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com.test.it.out#myLib_2.11/1.0/jsshfs_2.11-1.0.pom
[warn] ==== MY REPO: tried
[info] Resolving jline#jline;2.12 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::

它从不列出 MY REPO 的任何路径信息。

我尝试了多种方法来配置解析器,即使是应该失败并且结果不会改变的用户/主机。

显示解析器 [信息] List(SftpRepository(MY REPO,SshConnection(Some(KeyFileAuthentication(aUser,/home/aUser/.ssh/id_rsa,None)),Some(aHost),None),Patterns(ivyPatterns=List(), artifactPatterns= List(/repoBase/[organisation]/module(_[sbtVersion])/[revision]/[artifact]-revision.[ext]), isMavenCompatible=true, descriptorOptional=false, skipConsistencyCheck=false)))

我确实看到有人遇到同样的问题,并说从 SSH 切换到 SFTP 解决了它,在 12.?。我正在使用 13.7

我在这方面已经走到了互联网的尽头,请扩展一下。

谢谢!

【问题讨论】:

我可以在库项目中以同样的方式定义解析器并发布到它,所以我想它没有真正的问题。 这是一个愚蠢的解决方法! 使用 ssshfs 挂载远程仓库:/MY_REMOTE_REPO (我猜这些是一个衬里)解析器 += "My REPO via sshfs" at "file:///MY_REMOTE_REPO" 太糟糕了,我必须为每个人设置它。不会长期削减它 【参考方案1】:

我遇到了类似的问题,它没有列出它尝试过的任何网址。我添加了发布时使用的 Pattern,它解决了问题。另外,我已将我的解析器放在顺序中的第一个。

resolvers in ThisBuild := (Resolver.sftp("MY Repo", "example.com", 22, "sbt-repos/releases")(Patterns("[organisation]/[module](_[scalaVersion])(_[sbtVersion])/[revision]/[type]s/[artifact](-[classifier]).[ext]"))) +: resolvers.value

我正在使用0.13.9。我为此搜索了很多,经过这么多试验终于弄明白了。希望这会对某人有所帮助。

【讨论】:

有一天我将不得不再次尝试这个。我刚刚通过使用 rsync 将存储库同步回本地来解决它。【参考方案2】:
val sftpRes = 
  val privateKeyFile = new java.io.File(sys.env("HOME") + "/.ssh/id_rsa")
  Resolver.sftp("REPO", "gitHost", "/path/to/data/")(Resolver.ivyStylePatterns) as ("user", privateKeyFile)
  

publishMavenStyle := false

publishTo := Some(sftpRes)

使用 SBT 1.2.4

最后,这就是我要做的工作。我尝试了 Resolver.mavenStylePatterns,但在这种情况下,与其他 SBT 一样,SBT 从未真正尝试在解析器上查找文件。

在发布和解析中使用 Ivy 模式对我有用。

【讨论】:

以上是关于SBT SFTP 解析器不够努力的主要内容,如果未能解决你的问题,请参考以下文章

sbt/ivy 无法解析通配符 ivy 对文件系统解析器的依赖

SBT 不支持自定义解析器

SBT不使用基于ssh的解析器来解析依赖关系

使用 akka-http 模板的新 sbt 应用程序,如何确定解析器并添加 maven Central?

为啥 SBT 解析 SNAPSHOT 版本?

Sbt 插件在 bintray 上的发布和解析,不同的路径(sbt-bintray 插件)