Как изменить версию 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