exp*_*ert 13 scala intellij-idea sbt playframework
是否有必要更改SBT及其插件使用的Scala版本?
我正在使用Play Framework 2.1.1-RC2.我想创建将使用Scala 2.10.1的新项目.为了实现这一点,我做了以下
"org.scala-lang" % "scala-compiler" % "2.10.1"
于Build.scala
scalaVersion
为2.10.1 inBuild.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
Run Code Online (Sandbox Code Playgroud)
最后一行是关注我的.它说使用了Scala 2.9.2.我怎么能改变呢?它会影响什么版本将被用于编译我的代码?
更新:看起来这种更改版本的编译器无法正常工作.运行我的应用程序后,我在播放控制台中收到以下警告:
[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
Run Code Online (Sandbox Code Playgroud)
Dan*_*ral 13
SBT是一个Scala应用程序,与所有Scala应用程序一样,它需要遵守Scala的二进制兼容性规则.具体来说,版本2.8,2.9和2.10彼此不兼容.
这意味着,因为Play使用的SBT版本是使用Scala 2.9.2编译的,所以所有插件和所有项目定义必须使用另一个2.9.x版本进行编译.这是因为您Build.scala
不是简单地由SBT执行的东西,它成为 SBT执行的一部分.
但是,这与您应用程序应编译的Scala版本有任何关系.SBT可以使用任何Scala版本,甚至可以同时生成多个Scala版本 - 这就是Scala库为多个Scala版本提供二进制文件的方式.
exp*_*ert 11
我的实验的最终目标是更改用于构建项目的Scala编译器的版本.
经过多次尝试,我得出结论,很难实现它.我认为Play Framework的创建者应该解决这个问题.
在Build.scala中设置scalaVersion
为2.10.1-local
没有多大帮助.SBT似乎要去Maven/Ivy并下载我不想要的2.10.0件.编译应用程序后,我得到一堆关于不兼容依赖项的警告.
我认为这是因为{PLAY_HOME}\framework\project\Build.scala
有一堆变量设置为2.10.0.
"优雅"的解决方案是告诉SBT我将通过在Build.scala中设置以下变量来使用Scala的本地副本
scalaVersion := "2.10.1-local",
autoScalaLibrary := false,
scalaHome := Some(file("/Program Files (x86)/scala/"))
Run Code Online (Sandbox Code Playgroud)
但是如果我用play idea
命令创建IntelliJ IDEA配置,结果项目需要一些清理,特别是:
Scala 2.10.0
库.Scala 2.9.2
库我希望我的实验其他人也在学习Play和Scala.
详情请见:http://www.scala-sbt.org/release/docs/Howto/scala.html
归档时间: |
|
查看次数: |
11856 次 |
最近记录: |