无法使用 scala 的 sbt 从存储库中获取插件

Posted

技术标签:

【中文标题】无法使用 scala 的 sbt 从存储库中获取插件【英文标题】:Can't fetch plugins from repositories with scala's sbt 【发布时间】:2019-06-02 04:46:34 【问题描述】:

我尝试用 sbt 编译/构建 scala 项目,在 project/plugins.sbt 中提到了两个插件:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.17")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.4")

导入 sbt 项目时出错:

[error] sbt.librarymanagement.ResolveException: download failed: 
com.typesafe.play#sbt-plugin;2.6.17!sbt-plugin.jar
[error] download failed: com.typesafe.sbt#sbt-native-packager;1.3.4!sbt-native- 
packager.jar

似乎存储库证书中存在问题,因此我手动获取每个证书并使用命令将其添加到我的密钥库中(我使用 ubuntu):

keytool -import -alias "artifact server2" -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -file _.bintray.com

但这并没有帮助。

更新:我通过手动将所有证书(最终证书和中间证书)从 repo 的主机添加到本地密钥库来解决了我的问题。

【问题讨论】:

不知道 .. 对我有用:[info] downloading https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-native-packager/scala_2.12/sbt_1.0/1.3.4/jars/sbt-native-packager.jar ... [info] [SUCCESSFUL ] com.typesafe.sbt#sbt-native-packager;1.3.4!sbt-native-packager.jar (2397ms) 你能在浏览器中访问 URL 吗? @Stanislav Kapinus 你能添加来自 sbt 的错误输出吗?您如何理解这是证书问题?请在问题中提供尽可能多的有用信息。 @ygor 是的,我可以在日志记录中获取带有 url 的工件,但是 sbt 显示错误。 @IvanStanislavciuc 有这样的警告:[warn] [FAILED] com.typesafe.play#sbt-plugin;2.6.17!sbt-plugin.jar: sbt-plugin-releases: 无法获取 com.typesafe.play#sbt-plugin 的资源;2.6.17:res=repo.scala-sbt.org/scalasbt/sbt-plugin-releases/…:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider。 certpath.SunCertPathBuilderException: 无法找到请求目标的有效证书路径 @StanislavKapinus 尝试更新您的 JRE 或 JDK。确保您使用最新版本的 java 【参考方案1】:

这个问题让我几乎准备把我的 macbook 扔出窗外。

在我的 mac 上,java cacerts 位于此处:

/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre/lib/security/cacerts

为了获得sbt-native-packager 所需的证书,我使用了这个(我从某人那里偷来的,现在我找不到归属):

echo -n | openssl s_client -connect repo.scala-sbt.org:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/scala-sbt.cert

然后将其添加到 java 信任存储中,我使用了上面 Stanislav 的解决方案:

sudo keytool -import -alias "scala-sbt server" -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre/lib/security/cacerts -file /tmp/scala-sbt.cert

记住 cacerts 文件的默认密码是changeit

然后当我下一次运行 sbt 时,我下载的插件几乎快哭了。

【讨论】:

以上是关于无法使用 scala 的 sbt 从存储库中获取插件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Scala 从 SBT 获取堆栈跟踪

SBT 与 Maven Central - 在工件 url 中摆脱 Scala 版本

如何从scala对象中的sbt ProjectPlugin.scala加载对象

sbt update 没有解析存储库中的最新工件

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

SBT 在本地 maven 存储库中找不到文件,尽管它在那里