2016-04-04 6 views
5

:Tutarsız skala ben yürütme hataya yol bir uyarı var kütüphane versiyon

[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 

Bu garip benim scala versiyonu> 2.11 olduğu için:

$ scala -version 
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL 
$sbt sbtVesion 
[info] 0.13.9 

Benim 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" 
) 

Neden sadece benim scala kitaplığımın güncelliğini anlayamıyorum.

cevap

14

SBT yapınız tarafından kullanılan Scala sürümü, sistem Scala sürümünüz değil, SBT yapılandırmanız tarafından belirlenir. SBT 0.13 varsayılan Scala sürüm 2.10, ancak senin build.sbt aşağıdaki ayarı ile değiştirebilirsiniz:

scalaVersion := "2.11.8" 

sizin SBT projenin Scala sürümünün sistem Scala sürümüne bağlı değildir aslında (eğer orada Hatta bir tane bile oldukça kullanışlıdır - bu, birden fazla Scala sürümleri için çapraz oluşturulmuş, Scala yüklü olmayan makinelerde projeler oluşturabileceğiniz projelere sahip olabileceğiniz anlamına gelir.

Diğer bir not — bu bir başka not Scala bağımlılıkları için %% sözdizimini kullanarak bu tür bir uyuşmazlığı önlemek için iyi bir fikir Bu: Bunun yerine

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

:

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

%% eser adı diyor önce "bu adı kullanmak ama şu anda yapılandırılmış Scala versiyonudur ne olursa olsun _<Scala epoch version>.<Scala major version> ile soneki".

+0

Teşekkürler, 'scalaVersion' ekleyerek sorunumu çözdü. Ancak '%%' kütüphaneDependencies'ma eklendiğinde başka bir uyarı eklendi: jline # jline_2.11; 2.12: bulunamadı ' ve 'com.typesafe.akka # akka-actor_2.11_2.11; 2.3.4: değil found'. Ama %% 'olmadan program mükemmel çalışıyor! – Moebius

+1

İki sorun var: JLine bir Scala kütüphanesi değil, yani '%% 'veya' _2.11' çiftine ihtiyacınız yok, orijinal sürümünüz doğru. Akka için, aynı şeyi ifade ettikleri için ikisinden sadece birine ihtiyacınız var. %% 'sürümünü öneririm. –

+1

Ve 'corss CrossVersion.full', ammonite-repl gibi tam sürüm gerektiren bağımlılıklar için çok kullanışlıdır. –