Как изменить версию Scala, используемую Play, SBT и его плагинами?

необходимо ли менять версию Scala, которая используется SBT и его плагинами ?

Я использую Play Framework 2.1.1-RC2. Я хочу создать новый проект, который будет использовать Scala 2.10.1. Чтобы добиться этого, я сделал следующее

  • добавлена зависимость "org.scala-lang" % "scala-compiler" % "2.10.1" на Build.scala
  • инициализируется переменная scalaVersion в 2.10.1 в Build.scala

тогда я побежал play about команда и получил следующий вывод

[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

последняя строка-это то, что касаться меня. В нем говорится, что используется Scala 2.9.2. Как я могу это изменить ? Повлияет ли это на то, какая версия будет использоваться для компиляции мой код ?

обновление: похоже, что этот способ изменения версии компилятора не работал должным образом. После запуска приложения у меня есть следующие предупреждения в play console:

[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:worktest_projectstest2targetscala-2.10classes...
[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

2 ответов


SBT-это приложение Scala, и, как и все приложения Scala, оно должно соответствовать правилам двоичной совместимости Scala. В частности, версии 2.8, 2.9 и 2.10 не совместимы друг с другом.

это означает, что, поскольку версия SBT, используемая Play, была скомпилирована с Scala 2.9.2, то все плагины и весь проект определения должен быть скомпилирован с другой 2.9.X версии. Это потому, что ваш Build.scala Это не то, что просто выполняется SBT, это становится частью исполнения SBT.

однако это имеет отношение к тому, с какой версией Scala должно быть скомпилировано ваше приложение. SBT может использовать любую версию Scala и даже может одновременно создавать несколько версий Scala-именно так библиотеки Scala предоставляют двоичные файлы для нескольких версий Scala.


конечной целью моих экспериментов было изменение версии компилятора Scala, используемого для создания моего проекта.

после нескольких попыток я пришел к выводу, что достижение это красиво невозможно. Я думаю, что это то, что создатели Play Framework должны решить.

задание scalaVersion to 2.10.1-local в build.скала не очень-то помог. SBT, похоже, собирается Maven/Ivy и загружает части 2.10.0, которые я не хочу. После компиляции приложения я получаю кучу предупреждений о несовместимые зависимости.

Я думаю, это происходит потому, что {PLAY_HOME}\framework\project\Build.scala имеет кучу переменных, установленных в 2.10.0.

"элегантное" решение состояло в том, чтобы сообщить SBT, что я собираюсь использовать локальную копию Scala, установив следующие переменные в сборке.скала!--8-->

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

но все же, если я создаю конфигурацию IntelliJ IDEA с play idea команда результирующего проекта нуждается в некоторой очистке, в частности:

  • отсутствуют ссылки на фасет Scala Scala 2.10.0 библиотека.
  • модуль test3-build имеет зависимость от missing Scala 2.9.2 библиотека

Я надеюсь, что мои эксперименты другие люди, которые также учатся играть и Scala.

подробности здесь:http://www.scala-sbt.org/release/docs/Howto/scala.html