【发布时间】:2020-06-06 06:42:03
【问题描述】:
考虑以下一些build.sbt的内容,特别没有源代码:
lazy val y = (project in file("y"))
.settings(
scalaVersion := "2.11.8",
)
.dependsOn(x)
lazy val x = (project in file("x"))
.settings(
crossScalaVersions := Seq("2.11.8", "2.12.6")
)
这里,sbt y/compile,失败了
sbt.librarymanagement.ResolveException: unresolved dependency: x#x_2.11;0.1.0-SNAPSHOT: not found
这是sbt "show y/fullResolvers"所指的解释
Raw(ProjectResolver(inter-project, mapped: x#x_2.12;0.1.0-SNAPSHOT))
为什么提到_2.12?我想既然sbt "show y/allDependencies"列出了
x:x:0.1.0-SNAPSHOT
作为缺少scalaVersion 和_2.12 的依赖项,sbt 不理解(与外部库依赖项不同)要查找的scala 版本。 _2.12 似乎派生自 scalaVersion 的 ThisBuild 或 Global 值,默认为 2.12.x,在其中一个范围内更改 scalaVersion 可以解决上述简化示例的问题,但是如果我们添加
lazy val z = (project in file("z"))
.settings(
scalaVersion := "2.12.6",
)
.dependsOn(x)
那么我们在Global / ThisBuild 范围内为scalaVersion 选择的任何值,y 或z 都将无法构建。
我知道sbt "+ y/compile",但为什么sbt y/compile 不能正确默认匹配依赖项目和依赖项之间的scalaVersion?或者在解决依赖关系时可以选择正确的scalaVersion吗?
sbt "show sbtVersion" 给了我1.2.1,但我在不同版本中看到了同样的问题,以前没有在线解释帮助我理解/规避问题。
【问题讨论】:
标签: scala sbt resolver dependency-resolver scala-version-cross-build