【问题标题】:SBT: How to set common scala version for multiprojectSBT:如何为多项目设置通用 scala 版本
【发布时间】: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,但它要求我不要忘记手动创建它。

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

  2. 有什么方法可以为新创建的项目创建模板,所以当我只输入lazy val newProject = ... 行时,它会在其中放置一个适当的build.sbt 文件,其中包含我想要的内容?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    使用

    scalaVersion in ThisBuild := "2.11.7"
    

    在根build.sbt。

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 2011-02-22
      • 2015-04-25
      • 2015-02-26
      • 2014-08-18
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多