SBT:如何为多项目

时间:2015-12-15 13:56:40

标签: scala sbt

我在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并尝试查找为common构建的2.10项目我没有。

我总是忘记将scalaVersion := "2.11.7"添加到新创建的项目中,它一直在困扰我。我也希望sbt生成build.sbt一些默认数据,但它要求我不要忘记手动创建它。

  1. 有什么方法可以在一个地方为所有项目和子项目设置单个scala版本吗?我想我可以添加一个单独的lazy val commonSettings = Seq { scalaVersion := "2.11.7" }根定义。对于每个lazy val project定义,我应该在最后添加.settings(commonSettings)。这很好,但仍然看起来不够漂亮 - 我应该为每个项目定义执行此操作。有更好的方法吗?

  2. 有没有办法可以为新创建的项目创建模板,所以当我只是放行lazy val newProject = ...时,它会在那里放一个合适的build.sbt文件,里面有我想要的内容

1 个答案:

答案 0 :(得分:3)

使用

scalaVersion in ThisBuild := "2.11.7"

在根build.sbt