SBT常用构建设置

时间:2012-10-02 07:51:03

标签: scala sbt

我有多个SBT项目都有一个共同的设置 - 例如多模块,发布设置等等。

我如何提供例如每个项目都可以从中扩展的CommonBuild类?例如:

trait CommonBuild {
  val publishSettings = Seq(
    publishTo := Some("", ""),
    credentials += ...
  )

  def module(name: String) (
    settings: Seq[Setting[_]],
    projectId: String = PROJECT + "-" + name,
    dirName: String = name,
    srcPath: String = PROJECT + name
    ) = Project(projectId, file(dirName), settings = (buildSettings ++ srcPathSetting(projectId, srcPath)) ++ publishSettings ++ settings)

}

现在它可以被项目构建使用:

object ProjABuild extends CommonBuild {
   // use CommonBuild methods / vals
}

object ProjBBuild extends CommonBuild {
   // use CommonBuild methods / vals
}

1 个答案:

答案 0 :(得分:3)

我也想这样做。重要的是,通用设置需要存在于子项目所依赖的项目中,因此对公共设置所做的更改会自动在所有子项目中生效。实现这一目标的唯一方法是将常用内容放在SBT插件中。

我写了一个名为 iesl-sbt-base 的插件。它提供了一堆样板文件,因此项目的Build.scala文件可以简单地缩短。它提供:

  • 解析器配置
  • 通过自动更新简化了依赖关系解析
  • 明确使用何种传递依赖
  • 快照版本的可选保护
  • 清理日志记录配置

有关详细信息,请参阅https://github.com/iesl/iesl-sbt-base。您可能希望分叉以更改特定于我的设置的内容(例如,特别是解析程序URL)。如果有需求,我可以考虑如何使其更具可配置性。