2016-04-04 1 views
5

インコヒーレント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" 
) 

私のスカラーライブラリが古くなっている理由は分かりません。

答えて

14

SBTビルドで使用されるScalaのバージョンは、システムのScalaバージョンではなく、SBTの設定によって決まります。 SBT 0.13のデフォルトScalaのバージョンは2.10ですが、あなたはあなたのbuild.sbtで、次の設定を使用して、それを変更することができます。

scalaVersion := "2.11.8" 

あなたのSBTプロジェクトのScalaのバージョンがシステムScalaのバージョンに依存しないという事実(もし存在実際にはかなり便利です。つまり、複数のScalaバージョンのクロスビルドプロジェクト、Scalaがインストールされていないマシンでプロジェクトをビルドすることができるということです。

もう1つノートScalaの依存関係のために%%構文を使用することで、この種の不一致を避けることをお勧めします。この:この代わりの

libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.4" 

libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.3.4" 

%%アーティファクトの名前が言う前に、「この名前を使用しますが、現在設定されてScalaのバージョンが何であれ用_<Scala epoch version>.<Scala major version>でそれを接尾辞」。

+0

「scalaVersion」を追加して、私の問題を解決しました。しかし、 '%%'を私の 'libraryDependencies'に追加すると' Jline#jline_2.11; 2.12:not found 'と' com.typesafe.akka#akka-actor_2.11_2.11;という警告が追加されます。見つけた。しかし '%% 'がなければ、プログラムは完璧に動作します! – Moebius

+1

2つの問題があります:JLineはScalaライブラリではないので、元のバージョンが正しい2つの '%%'または '_2.11'のどちらも必要ありません。 Akkaの場合、同じことを表現するので、2つのうちの1つだけ必要です。 '%%'バージョンをお勧めします。 –

+1

そして、 'corss CrossVersion.full'は、' ammonite-repl'のようなフルバージョンを必要とする依存関係に対して非常に便利です。 –

関連する問題