Scala 为什么可以';如果SBT子项目定义了项目值,是否覆盖SBT子项目中的设置?
我有一个子项目,它定义了Scala 为什么可以';如果SBT子项目定义了项目值,是否覆盖SBT子项目中的设置?,scala,build,sbt,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) lazy val mylib = (project in file("mylib")).settings(Seq
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)
lazy val mylib = (project in file("mylib")).settings(Seq(scalaVersion := "2.11.8"))
并且不定义任何其他设置
在我的主要项目中,我是这样引用它的:
lazy val root = (project in file(".")).enablePlugins(PlayScala)
lazy val mylib = (project in file("mylib"))
lazy val myapp = (project in file("myapp")).dependsOn(mylib)
lazy val mylib = (project in file("mylib")).settings(Seq(scalaVersion := "2.11.8"))
问题是,以这种方式引用,mylib
是用Scala 2.10构建的,因为它没有指定scalaVersion
,而2.10是SBT的默认值
如果我尝试覆盖以下任何设置:
lazy val root = (project in file(".")).enablePlugins(PlayScala)
lazy val mylib = (project in file("mylib"))
lazy val myapp = (project in file("myapp")).dependsOn(mylib)
lazy val mylib = (project in file("mylib")).settings(Seq(scalaVersion := "2.11.8"))
他们被忽视了
但是,如果我从子项目的build.sbt
中删除lazy val root=…
,则从主生成文件传递的设置将按预期工作。但是,这会中断子项目的独立构建,因为必须在主文件中启用PlayScala插件
那么,我如何引用这样的项目并覆盖某些设置呢
我可以通过全局更改设置来解决这个问题(即此构建中的
scalaVersion
),但我希望能够覆盖其他内容,例如项目id,在这种情况下,它固定为根
。我通常会覆盖这样的设置,而且效果很好
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是的,这就是我正在做的,但是我想包括的一个项目是从github repo克隆的子模块(我希望与上游保持兼容),它包括lazy val root=。。。行以启用播放插件。如果它没有定义一个项目,它可以正常工作,但它确实可以,而且我无法覆盖它的设置>。您可以共享您正在使用的sbt文件,以便更容易复制吗