Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么可以';如果SBT子项目定义了项目值,是否覆盖SBT子项目中的设置?_Scala_Build_Sbt - Fatal编程技术网

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文件,以便更容易复制吗