为什么sbt不选择范围内的最新依赖版本?

时间:2018-08-13 14:19:07

标签: scala sbt

build.sbt 中,我们可以声明依赖项的范围;例如:

libraryDependencies += groupID %% "mylib" % "[2.0,)"

(在我的情况下)有多个软件包都在此范围内(我有2.0.2、2.0.3、2.0.4,甚至还有一些更奇特的版本,例如2.0.dev和2.0.3-dev mylib 在我的存储库中可用)。

当我尝试构建此项目时,sbt因此没有明显的理由选择版本 2.0.2 。我希望他能在这个范围内选出最多的人,但他永远不会。这是我尝试的要求以及他选择的版本(因此只有在指定确切的版本号时,他才会选择更新的版本):

revision range      |    version selected
-----------------------------------------
[2.0,)              |    2.0.2
[2.0.0,)            |    2.0.2
]2.0,)              |    2.0.2
2.0.+               |    2.0.2
latest.integration  |    2.0.2
2.0.3               |    2.0.3
2.0.4               |    2.0.4

我已经尝试了以下解决方法:

  • 删除本地〜/ .sbt 〜/ .ivy2 目录
  • 运行sbt -no-share -sbt-dir /tmp/sbt -ivy-dir /tmp/ivy以避免任何缓存效果
  • 在主目录中搜索名称中包含 mylib 的任何文件;仅在〜/ .ivy2
  • 中找到
  • 我使用 sbt 0.13.16 运行了大多数测试,但是我尝试使用0.13.15和0.13.17
  • 请注意,我所有的构建每次都在git存储库的干净克隆中运行;因此没有 target 目录。
  • mylib的2.0.2、2.0.3和2.0.4版本包含相同的代码和依赖关系(出于测试目的,我重新发布了它们)

1 个答案:

答案 0 :(得分:0)

问题(一次)似乎不存在于sbt中。

我尝试使用 sbt 1.2.1 和范围2.1.x。现在sbt抱怨说他找不到这种依赖关系。他列出了可用的版本:

[warn] ==== my-maven-repo: tried
[warn] http://my-server/nexus/repository/my-repo/eu/company/mylib_2.12/[revision]/mylib_2.12-[revision].pom
[warn]   [2.0.2, 2.0.2-dev.20180719.16.55.39.develop.dc3a706, 2.0.1-dev.20180719.16.49.57.develop.dc3a706, 2.0.1-dev.20180719.16.42.31.develop.dc3a706, 2.0.1.dev.20180719.16.31.59.develop.dc3a706]

奇怪的是,他没有列出我的nexus-maven存储库中所有可用的软件包。 使用nexus接口删除一个软件包后;看来此清单已经完成。

因此,真正的问题似乎是,sbt publish到一个关系存储库中并没有在该存储库中重新创建索引(sbtnexus方面的问题,仍然需要确定)。