如果定义项目值,为什么我不能覆盖SBT子项目中的设置?

时间:2017-03-24 10:45:22

标签: scala build sbt

我有一个子项目,定义root,如下所示:

lazy val root = (project in file(".")).enablePlugins(PlayScala)

并且没有定义任何其他设置。

在我的主项目中,我这样引用它:

lazy val mylib = (project in file("mylib"))
lazy val myapp = (project in file("myapp")).dependsOn(mylib)

问题是以这种方式引用,mylib是使用Scala 2.10构建的,因为它没有指定scalaVersion而2.10是SBT的默认值。

如果我尝试覆盖此类设置:

lazy val mylib = (project in file("mylib")).settings(Seq(scalaVersion := "2.11.8"))

他们被忽略了。

但是,如果我从子项目中移除lazy val root = ... build.sbt,则从主构建文件传递的设置按预期工作。这会打破子项目的独立构建,因为必须在主文件中启用PlayScala插件。

那么如何引用这样的项目并覆盖一些设置?

我可以通过全局更改设置来解决这个问题(例如scalaVersion in ThisBuild),但我希望能够覆盖其他内容,例如项目ID,例如root中的{{1}}情况下。

1 个答案:

答案 0 :(得分:0)

我通常会覆盖这样的设置,并且工作正常。

lazy val mylib = (project in file("mylib")).settings(
  scalaVersion := "2.11.8"
  //any other settings, I want to override, separated by comma
  propertyA := "A",
  propertyB := "C"
)

不同之处在于,我通常在Play应用程序中有依赖项,但所有内容都列在一个build.sbt