Почему crossScalaVersion не является scalaVersion?
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, я тоже так думаю.
crossScalaVersions := Seq(scalaVersion.value)
Почему не crossScalaVersions
соответствовать scalaVersion
?
1 ответ
scalaVersion.value
зависит от контекста. Так в Defaults.scala
его */*:scalaVersion
от appConfiguration.value.provider.scalaProvider
, Это версия, используемая для компиляции определения вашего проекта, включая ваш build.sbt
файл (сб 0.13.7
использования 2.10.4
scala-компилятор для компиляции определений вашего проекта). И это единственный способ, как определения вашего проекта (в том числе scalaVersion
) еще не скомпилирован, когда 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"