2013-03-28 3 views
13

Muss die Version von Scala, die von SBT und seinen Plugins verwendet wird, geändert werden?Wie kann ich die Version von Scala ändern, die von Play, SBT und seinen Plugins verwendet wird?

Ich benutze Play Framework 2.1.1-RC2. Ich möchte ein neues Projekt erstellen, das Scala 2.10.1 verwenden wird. Um das zu erreichen, dass ich habe folgende

  • Abhängigkeit "org.scala-lang" % "scala-compiler" % "2.10.1" in Build.scala hinzugefügt
  • initialisierte Variable scalaVersion bis 2.10.1 in Build.scala

Dann lief ich play about Befehl und bekam folgende Ausgabe

[test2] $ about 
Getting Scala 2.10.1 ... 
downloading http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar ... 
     [SUCCESSFUL ] org.scala-lang#scala-compiler;2.10.1!scala-compiler.jar (7401ms) 
downloading http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar ... 
     [SUCCESSFUL ] org.scala-lang#scala-library;2.10.1!scala-library.jar (4309ms) 
downloading http://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1.jar ... 
     [SUCCESSFUL ] org.scala-lang#scala-reflect;2.10.1!scala-reflect.jar (2144ms) 
downloading http://repo1.maven.org/maven2/org/scala-lang/jline/2.10.1/jline-2.10.1.jar ... 
     [SUCCESSFUL ] org.scala-lang#jline;2.10.1!jline.jar (201ms) 
:: retrieving :: org.scala-sbt#boot-scala 
     confs: [default] 
     5 artifacts copied, 0 already retrieved (24386kB/58ms) 
[info] This is sbt 0.12.2 
[info] The current project is {file:/C:/work/test_projects/test2/}test2 
[info] The current project is built against Scala 2.10.1 
[info] Available Plugins: play.Project, sbt.PlayProject, com.typesafe.sbteclipse.plugin.EclipsePlugin, com.typesafe.sbtidea.SbtIdeaPlugin 
[info] sbt, sbt plugins, and build definitions are using Scala 2.9.2 

Letzte Zeile ist was mich betrifft. Es heißt, dass Scala 2.9.2 verwendet wird. Wie kann ich das ändern? Beeinflusst es, welche Version verwendet wird, um meinen Code zu kompilieren?

Update: Sieht aus wie diese Art der Änderung der Version des Compilers nicht ordnungsgemäß funktioniert. Nachdem ich meine app laufen habe ich folgende Warnungen in Spielkonsole bekommt:

[warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
[warn] org.scala-lang: 2.10.1, 2.10.0 
[info] Compiling 5 Scala sources and 1 Java source to C:\work\test_projects\test2\target\scala-2.10\classes... 
[info] 'compiler-interface' not yet compiled for Scala 2.10.1. Compiling... 
[info] Compilation completed in 8.608 s 
[warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
[warn] org.scala-lang: 2.10.1, 2.10.0 
[info] play - Application started (Dev) 
[warn] Potentially incompatible versions of dependencies of {file:/C:/work/test_projects/test2/}test2: 
[warn] org.scala-lang: 2.10.1, 2.10.0 

Antwort

13

SBT ist eine Scala-Anwendung, und wie alle Scala-Anwendungen, muss sie von Scala Binärkompatibilität Regeln halten werden. Insbesondere sind die Versionen 2.8, 2.9 und 2.10 nicht miteinander kompatibel.

Das bedeutet, dass alle Plugins und alle Projekt Definitionen mit einer anderen 2.9.x-Version kompiliert werden müssen, da die von Play verwendete SBT-Version mit Scala 2.9.2 kompiliert wurde. Dies liegt daran, dass Ihr Build.scala nicht einfach von SBT ausgeführt wird, sondern Teil der SBT-Ausführung wird.

Das hat jedoch in irgendeiner Beziehung zu welcher Version von Scala Ihre Anwendung kompiliert werden soll. SBT kann jede Scala-Version verwenden und sogar mehrere Scala-Versionen gleichzeitig produzieren - so verwalten Scala-Bibliotheken Binaries für die verschiedenen Scala-Versionen.

+0

Danke. Das beantwortet meine Frage. Ich werde meine Antwort hinzufügen, um zu erklären, wie ich die Zielversion geändert habe. – expert

11

Das ultimative Ziel meiner Experimente war, die Version des Scala-Compilers zu ändern, mit dem mein Projekt erstellt wurde.

Nach mehreren Versuchen kam ich zu dem Schluss, dass es nicht möglich, es zu erreichen. Ich denke, dass dies etwas ist, was die Schöpfer von Play Framework ansprechen sollten.

Einstellung scalaVersion zu 2.10.1-local in Build.scala hat nicht viel geholfen. SBT scheint nach Maven/Ivy zu gehen und Stücke von 2.10.0 herunterzuladen, die ich nicht will. Nach dem Kompilieren der App bekomme ich eine Menge Warnungen über inkompatible Abhängigkeiten.

Ich denke, es passiert, weil {PLAY_HOME}\framework\project\Build.scala Bundle der Variablen auf 2.10.0 gesetzt hat.

"Elegante" Lösung war SBT zu sagen Ich werde lokale Kopie von Scala verwenden, indem ich folgende Variablen in Build setze.scala

scalaVersion := "2.10.1-local", 
autoScalaLibrary := false, 
scalaHome := Some(file("/Program Files (x86)/scala/")) 

Aber immer noch, wenn ich IntelliJ IDEA-Konfiguration mit play idea Befehl resultierenden Projekt erstellen muss einige aufzuräumen, insbesondere:

  • Scala Facette Referenzen fehlen Scala 2.10.0 Bibliothek.
  • Modul test3-build hat die Abhängigkeit von Scala 2.9.2 Bibliothek fehlt

ich meine Experimente andere Menschen Hoffnung, die auch spielen und Scala lernen.

Details sind hier: http://www.scala-sbt.org/release/docs/Howto/scala.html

Verwandte Themen