为什么SBT 0.12.2使用Scala 2.9.2解析插件,而忽略build.SBT中的Scalaversation?

为什么SBT 0.12.2使用Scala 2.9.2解析插件,而忽略build.SBT中的Scalaversation?,scala,sbt,Scala,Sbt,SBT0.12.2在插件导入上使用%%语法时,总是尝试使用Scala2.9.2解析插件 我曾尝试在build.sbt中设置Scala的旧版本、新版本等,甚至每次都删除target文件夹。。。似乎没有什么不同 name := "Game" version := "1.0" scalaVersion := "2.9.1" // SBT is ignoring the scala version SBT是,所以您需要为构建项目的project指定scala版本。换句话说,您需要向plugins.

SBT
0.12.2
在插件导入上使用
%%
语法时,总是尝试使用Scala
2.9.2
解析插件

我曾尝试在
build.sbt
中设置Scala的旧版本、新版本等,甚至每次都删除
target
文件夹。。。似乎没有什么不同

name := "Game"

version := "1.0"

scalaVersion := "2.9.1" // SBT is ignoring the scala version

SBT是,所以您需要为构建项目的project指定scala版本。换句话说,您需要向
plugins.sbt
文件添加适当的
scalaVersion

对于项目中的所有插件,您可以在
project/plugins.sbt
文件中设置
scalaVersion
,用于配置项目的构建项目定义以及定义插件的位置

$ cat project/plugins.sbt
scalaVersion := "2.9.3"
不过,有一种方法可以为插件设置更具体的sbt和Scala版本

使用
addSbtPlugin(依赖项:ModuleID,sbtVersion:String)
甚至
addSbtPlugin(依赖项:ModuleID,sbtVersion:String)
,而不是使用接受单个
ModuleID
(由
%
%
构建的
addSbtPlugin(依赖项:ModuleID,sbtVersion:String,scalaVersion:String)
,例如

$ cat project/plugins.sbt
// It doesn't exist and it's only for demo purposes
addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.1.0", "0.12.2", "2.5")

这很有效,谢谢你。但是,如果SBT是递归的,为什么它不从build.SBT中获取版本,而build.SBT可能是plugins.SBT的父级?内部项目只是
project
文件夹中的另一个SBT项目,并且不继承外部项目的设置。您可以在sbt邮件列表上询问为什么选择这种方法。那么,sbt在什么意义上是递归的呢?如果设置没有被继承,那么什么呢?这纯粹是因为SBT项目用于编译和SBT项目吗?递归是关于重复事物,而不是事物之间的关系。sbt项目是在scala中定义的,所以它本身需要构建。另一个sbt项目用于构建第一个sbt项目。后者也需要建造。等等因此,我们有一个递归项目定义