我怎样才能改变斯卡拉的版本所使用的播放,SBT及其插件?(How can I change vers

2019-08-18 02:15发布

是否有必要改变斯卡拉的版本所使用的SBT及其插件?

我使用的播放框架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

最后一行是让我忧心忡忡。 它说,斯卡拉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

Answer 1:

SBT是Scala的应用程序,并且,像所有的Scala的应用程序,它需要通过Scala的二进制兼容性规则来遵守。 具体来说,版本2.8,2.9和2.10不相互兼容。

这意味着,因为游戏中使用的SBT版本与斯卡拉2.9.2编译,然后所有的插件和所有项目的定义必须与其他2.9.x版本编译。 这是因为你的Build.scala不是一件简单地由SBT执行,它成为 SBT执行的一部分

然而,有任何的关系与什么版本的Scala的应用程序应进行编译。 SBT可以使用任何版本的Scala,甚至可以同时产生多个版本斯卡拉 - 这是斯卡拉库如何管理,以提供多个版本的Scala二进制文件。



Answer 2:

我实验的最终目的是改变用于构建我的项目Scala编译器的版本。

多次尝试后,我的结论是,实现好听不可能的。 我认为这是玩的东西框架的创作者应该解决的问题。

设置scalaVersion2.10.1-local的Build.scala并没有多大帮助。 SBT似乎要去的Maven / Ivy和下载的2.10.0条,我不想要的。 编译应用程序后,我得到一堆约不相容的依赖警告。

我想这是因为{PLAY_HOME}\framework\project\Build.scala有一堆变量设置到2.10.0。

“优雅”的解决办法是告诉SBT我打算在Build.scala设置以下变量使用斯卡拉的本地副本

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

但仍然,如果我创建的IntelliJ IDEA配置play idea命令生成的项目需要一定的清理,特别是:

  • 斯卡拉突间引用缺少Scala 2.10.0库。
  • 模块TEST3建造对缺少相关Scala 2.9.2

我希望我的实验,其他人谁也学习播放和Scala。

详情请看这里: http://www.scala-sbt.org/release/docs/Howto/scala.html



文章来源: How can I change version of Scala that is used by Play, SBT and its plugins?