在 sbt 中通过 https 访问 maven repo
Posted
技术标签:
【中文标题】在 sbt 中通过 https 访问 maven repo【英文标题】:Access maven repo over https in sbt 【发布时间】:2020-05-02 22:18:46 【问题描述】:我有一个使用 sbt(scala) 构建的 java 项目。直到昨天这还有效,但今天我发现从 maven 中提取 repo 时出现问题
esolving org.codehaus.plexus#plexus-component-api;1.0-alpha-16 ...
[error] SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
[warn] module not found: org.codehaus.plexus#plexus-component-api;1.0-alpha-16
[warn] ==== typesafe-ivy-releases: tried
[warn] http://repo.typesafe.com/typesafe/ivy-releases/org.codehaus.plexus/plexus-component-api/1.0-alpha-16/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn] http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.codehaus.plexus/plexus-component-api/1.0-alpha-16/ivys/ivy.xml
[warn] ==== local: tried
[warn] /root/.ivy2/local/org.codehaus.plexus/plexus-component-api/1.0-alpha-16/ivys/ivy.xml
[warn] ==== activator-local: tried
[warn] file:/heimdall/app/projects/load-test/content-engine/repository/org.codehaus.plexus/plexus-component-api/1.0-alpha-16/ivys/ivy.xml
[warn] ==== public: tried
[warn] http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
[warn] ==== typesafe-releases: tried
[warn] http://repo.typesafe.com/typesafe/releases/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
[warn] ==== typesafe-ivy-releasez: tried
[warn] http://repo.typesafe.com/typesafe/ivy-releases/org.codehaus.plexus/plexus-component-api/1.0-alpha-16/ivys/ivy.xml
[warn] ==== Typesafe repository: tried
[warn] http://repo.typesafe.com/typesafe/releases/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
根据我的推断,repo 似乎已移至 https 端点。并且 pom 文件在 https 端点上可用。问题是这不是我项目中的直接依赖项,而是通过其他一些依赖项传递而来。对于这种特定的依赖,我该如何使用 https?
我使用的是 sbt 版本 0.13.5。我检查了reference manual,并在 build.sbt 中明确添加了 DefaultMavenRepository
resolvers += DefaultMavenRepository
根据这个官方文档,DefaultMavenRepository 指向安全端点。在此之前,我在 build.sbt 中尝试过以下操作
resolvers += "Maven Repo" at "https://repo1.maven.org/maven2/"
并添加了
"org.codehaus.plexus" % "plexus-component-api" % "1.0-alpha-16",
在我的 build.sbt 中明确地作为 libraryDepdency 以便它可以被缓存而不是传递到我可能无法控制它从哪里拉出的地方。但这也失败了。我清除了 m2 和 ivy2 缓存
【问题讨论】:
问题是sbt 0.13.5
发布时,repo1.maven.org/maven2/
没有https
支持。我想你可以试试resolvers -= DefaultMavenRepository
,然后是resolvers += "Maven Repo" at "https://repo1.maven.org/maven2/"
。
根据 0.13 的文档,DefaultMavenRepository 指向安全端点。我尝试了你的建议,但仍然是同样的问题。我的 build.sbt 有这些新行 resolvers += DefaultMavenRepository
resolvers += "Maven Repo" at "https://repo1.maven.org/maven2/"
默认 maven 存储库已移至 0.13.6
中的 https。您可以改用它。 Maven 中心在这篇文章之前一直是 http -> max.computer/blog/…
【参考方案1】:
创建一个sbt配置文件~/.sbt/repositories
并添加如下配置:
[repositories]
maven-central: https://repo1.maven.org/maven2
您可以在这里找到更多信息 - https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html
【讨论】:
【参考方案2】:检查 sbt 配置文件中的链接:~/.sbt/repositories
将maven-central: http://repo1.maven.org/maven2/
这一行改为maven-central: https://repo1.maven.org/maven2/
它修复了没有 sbt 更新的下载
【讨论】:
我需要创建 ~/.sbt/repositories 并添加以下行:[repositories] maven-central: repo1.maven.org/maven2 不是@cnmuc 写的,但差不多。在 Users/正如 Sarvesh 所提到的,问题在于我使用的是 sbt 版本 0.13.5。并且 DefaultMavenRepository 从 v0.13.6 开始指向 https 端点(文档没有提到这一点)。升级版本后,我能够拉取所有依赖项。
【讨论】:
【参考方案4】:将以下解析器添加到您的 build.sbt 或 sbt 文件中:
resolvers += "Maven Central Server" at "https://repo1.maven.org/maven2"
然后在执行 sbt jar 文件时添加以下属性以启用 TLS 1.2 协议:
(java -Dhttps.protocols=TLSv1.2 -jar 目录名 $0/sbt-launch-0.12.0.jar)
-Dhttps.protocols=TLSv1.2
【讨论】:
【参考方案5】:对于 osx:
打开终端。 cd 到 ./sbt(在我的例子中是 /Users/your-user/.sbt)touch repositories
nano repositories
粘贴以下内容(请务必在 [repositories] 之后添加新行
[存储库] maven-central:https://repo1.maven.org/maven2/
【讨论】:
以上是关于在 sbt 中通过 https 访问 maven repo的主要内容,如果未能解决你的问题,请参考以下文章
未找到:https://repo1.maven.org/maven2/org/jetbrains/sbt-idea-shell_2.12_1.0/2017.2/sbt-idea-shell-2017.