出于好奇,我想知道sbt使用的默认scalaVersion
是否在源代码中以某种方式进行了硬编码?我指的是未明确指定scala版本的所有项目的版本(通过scalaVersion
设置键)
我问这个是因为,在我的机器上,我在任何地方使用sbt 0.12.4并且没有build.sbt
个文件(既不是项目根目录,也不是project
或~/.sbt/plugins
),并且当我输入sbt about
时,我得到了这个:
...
[info] sbt, sbt plugins, and build definitions are using Scala 2.9.2
我已经在使用scala 2.10.2(在我的PATH
中),但我认为这个安装与sbt无关,因为它从官方回购中下载了scala。
有许多类似的问题like this和this,但它们仅涉及特定项目。
有什么想法吗?
答案 0 :(得分:4)
默认情况下,sbt将使用与运行sbt本身相同的Scala版本构建项目。但是〜/ .sbt / boot目录从存储库下载scala jar,类似于插件jar - 因此默认的scala版本是存储库中配置的sbt的依赖项。意味着sbt版本向前推进,因此默认的scala版本将向前推进,由sbt devs配置。
这可以通过查看plugins / target / resolution-cache / reports / default-global-plugins-scala-tool.xml(以及runtime-resolved.xml中的相同内容)来确认:
<module organisation="org.scala-lang" name="scala-compiler">
<revision name="2.10.2" status="release" pubdate="20130607040625" resolver="sbt-chain" artresolver="sbt-chain" homepage="http://www.scala-lang.org/" downloaded="false" searched="false" default="false" conf="default, optional, compile, runtime, optional(default), master" position="0">
<license name="BSD-like" url="http://www.scala-lang.org/downloads/license.html "/>
<metadata-artifact status="no" details="" size="2843" time="0" location="C:\Users\Bestos\.ivy2\cache\org.scala-lang\scala-compiler\ivy-2.10.2.xml" searched="false" origin-is-local="false" origin-location="http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.2/scala-compiler-2.10.2.pom"/>
<caller organisation="default" name="global-plugins" conf="scala-tool" rev="2.10.2" rev-constraint-default="2.10.2" rev-constraint-dynamic="2.10.2" callerrev="0.0"/>
<artifacts>
<artifact name="scala-compiler" type="jar" ext="jar" status="no" details="" size="14411577" time="0" location="C:\Users\Bestos\.ivy2\cache\org.scala-lang\scala-compiler\jars\scala-compiler-2.10.2.jar">
<origin-location is-local="false" location="http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.2/scala-compiler-2.10.2.jar"/>
</artifact>
</artifacts>
</revision>
</module>
当然,用于单个项目的scala版本可以通过设置scalaVersion
以不同的方式配置为“bootstrap scala版本”。在build.sbt:
scalaVersion := "2.10.1"