为啥 SBT 解析 SNAPSHOT 版本?

Posted

技术标签:

【中文标题】为啥 SBT 解析 SNAPSHOT 版本?【英文标题】:Why does SBT resolve SNAPSHOT version?为什么 SBT 解析 SNAPSHOT 版本? 【发布时间】:2018-03-28 04:56:11 【问题描述】:

这是我的解析器:

resolvers in ThisBuild ++= Seq(
  "Sonatype Nexus Repository Manager" at "https://.../repository/maven-snapshots/",
  "Sonatype Nexus Repository Manager" at "https://.../repository/maven-releases/")

这里是如何指定依赖的:

libraryDependencies += a %% b % "1.+"

Nexus 在maven-releases 中包含1.0.0

这是我得到的日志:

[FAILED     ] a#b_2.11;1.0.0-SNAPSHOT!b_2.11.jar:  (0ms)
[warn] ==== local: tried
[warn]   /Users/me/.ivy2/local/a/b_2.11/1.0.0-SNAPSHOT/jars/b_2.11.jar
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/.../b_2.11/1.0.0-SNAPSHOT/b_2.11-1.0.0-SNAPSHOT.jar
[warn] ==== local-preloaded-ivy: tried
[warn]   /Users/me/.sbt/preloaded/a/b_2.11/1.0.0-SNAPSHOT/jars/b_2.11.jar
[warn] ==== local-preloaded: tried
[warn]   file:////Users/pavelvoronin/.sbt/preloaded/.../b_2.11/1.0.0-SNAPSHOT/b_2.11-1.0.0-SNAPSHOT.jar
[warn] ==== Sonatype Nexus Repository Manager: tried
[warn]   https://.../repository/maven-snapshots/.../b_2.11/1.0.0-SNAPSHOT/b_2.11-1.0.0-SNAPSHOT.jar
[warn] ==== Sonatype Nexus Repository Manager: tried
[warn]   https://.../repository/maven-releases/.../b_2.11/1.0.0-SNAPSHOT/b_2.11-1.0.0-SNAPSHOT.jar

为什么要查找SNAPSHOT?并没有注意到1.0.0

来自 Ivy docs 的一些台词:

+ 结束修订选择最新的子修订 依赖模块。例如,如果依赖模块存在于 修订版 1.0.3、1.0.7 和 1.1.2,“1.0.+”将选择 1.0.7。

更新

在我清理 Ivy 缓存后,它开始只是告诉我找不到 1.+。以下是来自 Nexus 的一些日志:

2017-10-18 11:51:07,030+0000 DEBUG [qtp219355933-2530] user org.sonatype.nexus.repository.view.Router - Request: Requestaction=‘HEAD’, path=‘/.../b_2.11/maven-metadata.xml’, parameters=, payload=HttpRequestPayloadAdaptercontentType=‘null’, size=-1, multipart=false

2017-10-18 11:51:07,031+0000 DEBUG [qtp219355933-2530] user org.sonatype.nexus.repository.view.handlers.BrowseUnsupportedHandler$MatcherImpl - Matching: HEAD /.../b_2.11/maven-metadata.xml

2017-10-18 11:51:07,034+0000 DEBUG [qtp219355933-2530] user org.sonatype.nexus.repository.view.Router - Response: Responsestatus=Statussuccessful=false, code=404, message=‘.../b_2.11/maven-metadata.xml’, payload=null

【问题讨论】:

我认为问题在于您的解析器具有相同的名称。 sbt 应该抱怨它。如果您重命名/删除快照解析器,它会解析 1.0.0 吗? 不,它没有。那是我第一次尝试。结果相同。:([1.0,)integration.latest 都不起作用。我还尝试将机器人发布为 Maven 和 Ivy 工件 - 没有区别。 如果您删除了快照解析器,但它仍然无法解析1.0.0(假设它是正确发布的 maven 样式),这很奇怪。我会将其作为问题提交到sbt/sbt @laughedelic 可能这与 Nexus 有关,因为这种版本控制适用于公共存储库。 @laughedelic 进一步调查显示,SBT 在path=‘/.../b_2.11/maven-metadata.xml 向 Nexus 索要maven-metadata.xml 文件,并得到404 - NotFound 的回应。似乎 SBT 在发布时不会生成此文件。 【参考方案1】:

问题是标准sbt pack 没有创建maven-metadata.xml 文件。

使用Aether-deploy 插件一切正常。

【讨论】:

以上是关于为啥 SBT 解析 SNAPSHOT 版本?的主要内容,如果未能解决你的问题,请参考以下文章

maven实战(10)_上传构件到nexus

使用 SBT 和 SNAPSHOT 依赖项脱机工作

为啥 sbt 在成功解析 scalacheck 后会给出“object scalacheck is not a member of package org”?

为啥 Maven 版本中有 SNAPSHOT? [复制]

我如何知道我运行的是哪个版本的 SBT? [复制]

为啥我在一个环境中的 sbt 中出现冲突的交叉版本,而在另一个环境中却没有?