2013-03-28 9 views
13

È necessario modificare la versione di Scala utilizzata da SBT e dai relativi plug-in?Come posso cambiare la versione di Scala utilizzata da Play, SBT e i suoi plugin?

Utilizzo Play Framework 2.1.1-RC2. Voglio creare un nuovo progetto che utilizzi Scala 2.10.1. Per raggiungere questo ho seguito

  • aggiunto dipendenza "org.scala-lang" % "scala-compiler" % "2.10.1" in Build.scala
  • inizializzata variabile scalaVersion a 2.10.1 in Build.scala

Poi corsi play about comando e preso seguente output

[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 

L'ultima riga è ciò che mi preoccupa. Dice che è usato Scala 2.9.2. Come posso cambiarlo? Influirà sulla versione che verrà utilizzata per compilare il codice my?

Aggiornamento: Sembra che questo modo di modificare la versione del compilatore non abbia funzionato correttamente. Dopo corro la mia app ho seguenti avvisi nella console di gioco:

[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 

risposta

13

SBT è un'applicazione Scala, e, come tutte le applicazioni di Scala, ha bisogno di essere rispettare le regole di compatibilità binaria di Scala. Nello specifico, le versioni 2.8, 2.9 e 2.10 non sono compatibili tra loro.

Ciò significa che, poiché la versione SBT utilizzata da Play è stata compilata con Scala 2.9.2, tutti i plug-in e tutte le definizioni del progetto devono essere compilati con un'altra versione 2.9.x. Questo perché il tuo Build.scala non è qualcosa che viene semplicemente eseguito da SBT, è diventa parte di esecuzione SBT.

Tuttavia, questo ha una relazione con quale versione di Scala deve essere compilata l'applicazione. SBT può utilizzare qualsiasi versione di Scala e può anche produrre più versioni di Scala contemporaneamente - il che è il modo in cui le librerie Scala riescono a fornire i binari per le diverse versioni di Scala.

+0

Grazie. Questo risponde alla mia domanda. Aggiungerò anche la mia risposta per spiegare come ho cambiato la versione di destinazione. – expert

11

L'obiettivo finale dei miei esperimenti era di modificare la versione del compilatore Scala utilizzato per creare il mio progetto.

Dopo diversi tentativi ho concluso che non è possibile ottenerlo in modo soddisfacente. Penso che sia qualcosa che i creatori di Play Framework dovrebbero affrontare.

L'impostazione scalaVersion a 2.10.1-local in Build.scala non ha aiutato molto. SBT sembra andare a Maven/Ivy e scaricare pezzi di 2.10.0 che non voglio. Dopo aver compilato l'app ricevo un sacco di avvertenze sulle dipendenze incompatibili.

Penso che succeda perché {PLAY_HOME}\framework\project\Build.scala ha un gruppo di variabili impostato su 2.10.0.

Soluzione "elegante" era dire a SBT che userò la copia locale di Scala impostando le seguenti variabili in Build.Scala

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

Ma ancora se creo configurazione IntelliJ IDEA con il progetto risultante play idea comando ha bisogno di un po 'di pulizia, in particolare:

  • Scala riferimenti sfaccettatura mancanti Scala 2.10.0 biblioteca.
  • modulo test3-build ha dipendenza mancante Scala 2.9.2 biblioteca

Spero che i miei esperimenti altre persone che sono anche imparando Play e Scala.

I dettagli sono qui: http://www.scala-sbt.org/release/docs/Howto/scala.html

Problemi correlati