我收到警告,导致执行错误:
[info] Set current project to calculator (in build file:/home/guillaume/projects/scala/2/)
[info] Updating {file:/home/guillaume/projects/scala/2/}root...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[warn] Scala version was updated by one of library dependencies:
[warn] * org.scala-lang:scala-library:2.10.5 -> 2.11.1
[warn] To force scalaVersion, add the following:
[warn] ivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) }
[warn] Run 'evicted' to see detailed eviction warnings
[info] Compiling 3 Scala sources to /home/guillaume/projects/scala/2/target/scala-2.10/classes...
[success] Total time: 9 s, completed Apr 5, 2016 12:16:04 AM
这很奇怪,因为我的scala版本是> 2.11:
$ scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL
$sbt sbtVesion
[info] 0.13.9
我的build.sbt:
lazy val root = (project in file(".")).
settings(
name := "calculator",
libraryDependencies += "jline" % "jline" % "2.12",
libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.3.4"
)
我只是不明白为什么我的scala库已经过时了。
答案 0 :(得分:14)
您的SBT构建使用的Scala版本由您的SBT配置决定,而不是您的系统Scala版本。 SBT 0.13的默认Scala版本为2.10,但您可以使用build.sbt
中的以下设置进行更改:
scalaVersion := "2.11.8"
您的SBT项目的Scala版本并不依赖于您的系统Scala版本(如果有的话)实际上非常方便 - 这意味着您可以拥有跨多个项目的交叉构建Scala版本,您可以在没有安装Scala的机器上构建项目等等。
另一个注意事项 - 通过对Scala依赖项使用%%
语法来避免这种不匹配是个好主意 - 例如。这样:
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.4"
而不是:
libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.3.4"
工件名称前面的%%
表示&#34;使用此名称,但后缀为_<Scala epoch version>.<Scala major version>
,无论当前配置的Scala版本是什么&#34;。