不相干的scala库版本

时间:2016-04-04 22:21:27

标签: scala

我收到警告,导致执行错误:

[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库已经过时了。

1 个答案:

答案 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;。