sbt/ivy 版本范围无法解析,但确切版本可以解析

sbt/ivy version ranges does not resolve but exact versions do

当我使用范围语法时,我似乎无法让 SBT 解决我的依赖关系。

所以

libraryDependencies ++= Seq(
  //exact version works i.e.     0.5.3+27
  //but what we want to work is  [0.5.3,)
  //or I've since moved the build number to the 4th component  0.5.3.+
  "company"                %% "project"      % "0.5.3.+",
  //...
)

我可以获得准确的版本以正常工作,但是 none 指定的版本语法 https://ant.apache.org/ivy/history/2.3.0/ivyfile/dependency.html#revisionhttp://www.scala-sbt.org/0.13/docs/Library-Management.html 上的示例有效。

我环顾四周,发现这里 https://github.com/sbt/sbt/pull/2075 有一个类似这样的修复程序,它进入了 sbt 0.13.9,我正在使用 0.13.11.

第一个版本范围是我使用的,因为语义版本在点 10 when that didn't work, the library management docs / Ivy revision docs 中建议元数据说 "end the revision with a + selects the latest sub-revision of the dependency module",所以我删除了 + 以防出现问题,并且添加了第四个组件,它只是 GoCD 提供的内部版本号。同样,精确版本有效,但子修订版无效。

在 sbt 中,我可以看到正在命中的两种格式中的 URL:

  1. https://dl.bintray.com/<username>/internal-releases/<namespace>/<project-name>_2.11/[revision]/<project-name>_2.11- [修订版].pom
  2. http://dl.bintray.com/<username>/internal-releases/<namespace>/<project-name>_2.11/[revision]/ivys/ivy.xml

注意这里[revision]是URL字面上打印出来的。尖括号中的东西是我的替代品。因此,为什么我认为 issue 2005 是相关的。 我没有 SBT 存储库文件。

所以对于这个问题,我在上面做错了什么,我如何使用 min.minor.patch.build 语法获得版本范围,即 0.x.x.+?

解决了这个问题。 Bintray 目录列表没有有效的 HTTP 链接(Binary 方面的反爬虫努力。)因此 Ivy 解析器无法获取已发布版本的列表。

使用 maven 布局而不是 Ivy 的布局是可行的,因为 Maven 格式包含一个 metadata.xml,它列出了所有可用的版本。 因此,解决方法是使用 Maven 布局而不是 Ivy 重新发布库来获取此元数据。