在SBT中的所有子模块中共享配置

时间:2012-09-03 08:45:59

标签: sbt

我有两个测试配置,我想包含在我的所有子项目中。我希望有一个简单的方法来做到这一点。目前,我将它们添加到每个项目中,方法是:

.configs(config1, config2)

为了确保每个项目都包含一些设置,您可以这样做:

scalaVersion in ThisBuild := "2.10.0"

还有一个ThisProject对象。我想知道我是否能够使用这些对象中的任何一个来为所有项目添加配置。

2 个答案:

答案 0 :(得分:1)

您可以定义Project => Project并传入项目。使用sbt 0.13,您还可以在build.sbt中定义多项目构建。

project/common.scala

import sbt._
import Keys._

object Common {
  val Config1 = config("config1") extend(Test)
  val Config2 = config("config2") extend(Test)

  def addConfigs(proj: Project): Project = proj.configs(Config1, Config2)
}

build.sbt

import Common._

lazy val app = addConfigs(project.in(file("app")))

答案 1 :(得分:0)

如果您使用具有aggreagation的父项目,配置是否不会应用于子项目?

object MyBuild extends Build {
  lazy val root = Project(id="myproject", base=file("."))
    .aggregate(sub1, sub2)
    .configs( config1, config2 )

  lazy val sub1 = Project(id = "sub1", base = file("sub1"))
  lazy val sub2 = Project(id = "sub2", base = file("sub1"))
}

除了“ThisBuild”范围之外,还有一个可能有效的“全局”范围:enter link description here,但您可以使用项目级插件来应用配置 - global configuration with a pluginSBT Plugin page(请参阅示例插件部分)。