【发布时间】:2015-12-15 22:45:04
【问题描述】:
我在 IntellJ Idea 中有一个多 SBT 项目。我在根目录中的 SBT 文件如下所示:
name := "PlayRoot"
version := "1.0"
lazy val shapeless_learn = project.in(file("shapeless_learn")).dependsOn(common)
lazy val scalaz_learn = project.in(file("scalaz_learn")).dependsOn(common)
lazy val common = project.in(file("common"))
lazy val root = project.in(file(".")).aggregate(common, shapeless_learn, scalaz_learn)
scalaVersion := "2.11.7"
然后我有每个项目的文件夹:./common、./shapeless_learn、./scalaz_learn,每个项目都有自己的build.sbt。但出于某种原因,我需要在每个子项目build.sbt 文件中放入scalaVersion := "2.11.7" 行。
如果我忘记这样做,构建将失败并显示以下消息:
Error:Unresolved dependencies: common#common_2.10;0.1-SNAPSHOT: not found
See complete log in ...
由于某种原因,如果我没有指定我的 scala 版本是 2.11.7,sbt 会退回到 2.10 并尝试找到为 2.10 构建的 common 项目,而我没有。
我总是忘记将scalaVersion := "2.11.7" 添加到新创建的项目中,这一直困扰着我。我也希望 sbt 使用一些默认数据生成 build.sbt,但它要求我不要忘记手动创建它。
有什么方法可以在一个地方为所有项目和子项目设置单个 scala 版本吗?我想我可以在根目录中添加一个单独的lazy val commonSettings = Seq { scalaVersion := "2.11.7" }定义。对于每个lazy val project定义,我应该在最后添加.settings(commonSettings)。这很好,但看起来仍然不够漂亮 - 我应该为每个项目定义都这样做。有没有更好的办法?有什么方法可以为新创建的项目创建模板,所以当我只输入
lazy val newProject = ...行时,它会在其中放置一个适当的build.sbt文件,其中包含我想要的内容?
【问题讨论】: