为什么crossScalaVersion不是scalaVersion?

时间:2015-01-26 11:33:08

标签: scala sbt cross-build

build.sbt

scalaVersion := "2.11.4"

项目/ build.properties

sbt.version=0.13.7

然后

> show scalaVersion
[info] 2.11.4
> show crossScalaVersions
[info] List(2.10.4)
> inspect crossScalaVersions
[info] Setting: scala.collection.Seq[java.lang.String] = List(2.10.4)
[info] Description:
[info]  The versions of Scala used when cross-building.
[info] Provided by:
[info]  */*:crossScalaVersions
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:237
[info] Delegates:
[info]  *:crossScalaVersions
[info]  {.}/*:crossScalaVersions
[info]  */*:crossScalaVersions
[info] Related:
[info]  */*:crossScalaVersions

似乎crossScalaVersions应为List(2.11.4)

看看SBT' source code,这也是我的想法。

crossScalaVersions := Seq(scalaVersion.value)

为什么crossScalaVersions scalaVersion与<{1}}对应?

1 个答案:

答案 0 :(得分:2)

scalaVersion.value与上下文有关。所以Defaults.scala来自*/*:scalaVersion appConfiguration.value.provider.scalaProvider build.sbt。它是用于编译项目定义的版本,包括您的0.13.7文件(sbt 2.10.4使用scalaVersion scala-compiler来编译项目定义)。而且,当Defaults执行crossScalaVersions并定义*/*:crossScalaVersions时,您的项目定义(包括*/*:scalaVersion)的唯一方法尚未编译。因此,proj/*:scalaVersion取决于Provided by而不是scalaVersion := 2.11.4

只需将build.sbt> inspect scalaVersion [info] Setting: java.lang.String = 2.11.4 [info] Description: [info] The version of Scala used for building. [info] Provided by: [info] {file:/Users/user/dev/proj/}proj/*:scalaVersion [info] Defined at: [info] /Users/user/dev/proj/build.sbt:1 [info] Reverse dependencies (D=derives): [info] *:allDependencies [info] D *:scalaBinaryVersion [info] *:libraryDependencies [info] *:scalaInstance [info] *:crossScalaVersions [info] *:update [info] Delegates: [info] *:scalaVersion [info] {.}/*:scalaVersion [info] */*:scalaVersion [info] Related: [info] */*:scalaVersion 内的明确> inspect scalaVersion [info] Setting: java.lang.String = 2.10.4 [info] Description: [info] The version of Scala used for building. [info] Provided by: [info] */*:scalaVersion [info] Defined at: [info] (sbt.Defaults) Defaults.scala:232 [info] Reverse dependencies: [info] *:allDependencies [info] *:libraryDependencies [info] *:update [info] *:scalaInstance [info] Delegates: [info] *:scalaVersion [info] {.}/*:scalaVersion [info] */*:scalaVersion [info] Related: [info] */*:scalaVersion 进行比较:

*/*:scalaVersion

没有一个(只是空项目):

build.sbt

因此,您只需在scalaVersion in GlobalScope := "2.11.2" 中重新定义{{1}}:

{{1}}