在我有这样的事情之前(简化),使用sbt 0.11.3:
// project/Build.scala
import sbt._
import Keys._
object MyBuild extends Build {
lazy val standardSettings = Defaults.defaultSettings ++ Seq(
version := "0.2",
scalaVersion := "2.9.2"
)
lazy val main = Project(
id = "main",
base = file( "." ),
settings = standardSettings,
aggregate = Seq( sub )
)
lazy val sub = Project(
id = "main-sub",
base = file( "sub" ),
settings = standardSettings
)
}
但我希望在普通build.sbt
文件中保留尽可能多的信息。所以现在我有了
// build.sbt
version := "0.2"
scalaVersion := "2.9.2"
和
// project/Build.scala
import sbt._
import Keys._
object MyBuild extends Build {
lazy val main = Project(
id = "main",
base = file( "." ),
aggregate = Seq( sub )
)
lazy val sub = Project(
id = "main-sub",
base = file( "sub" )
)
}
但是我的设置中似乎没有将build.sbt
混合到子项目中:
> show version
[info] main-sub/*:version
[info] 0.1-SNAPSHOT
[info] main/*:version
[info] 0.2
> show scala-version
[info] main-sub/*:scala-version
[info] 2.9.1
[info] main/*:scala-version
[info] 2.9.2
如何解决这个问题?我还尝试将明确的settings
添加到子项目中,例如
settings = Defaults.defaultSettings
settings = Project.defaultSettings
settings = MyBuild.settings
settings = main.settings
(确定这个应该做什么?!)......但都没有用。
答案 0 :(得分:8)
sbt's Multi Projects documentation的最后一部分隐藏了这些信息:
当有一个
.scala
文件设置不同的项目时,很容易在不同的项目中使用重用设置。但即使使用不同的build.sbt
文件,通过使用ThisBuild
范围来设置全局设置,仍然可以轻松地在主构建中的所有项目之间共享设置。
因此:
// build.sbt
version in ThisBuild := "0.2"
scalaVersion in ThisBuild := "2.9.2"
哇,如果你有二十几个键,会耗费大量时间。