我有多个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
}
答案 0 :(得分:3)
我也想这样做。重要的是,通用设置需要存在于子项目所依赖的项目中,因此对公共设置所做的更改会自动在所有子项目中生效。实现这一目标的唯一方法是将常用内容放在SBT插件中。
我写了一个名为 iesl-sbt-base 的插件。它提供了一堆样板文件,因此项目的Build.scala文件可以简单地缩短。它提供:
有关详细信息,请参阅https://github.com/iesl/iesl-sbt-base。您可能希望分叉以更改特定于我的设置的内容(例如,特别是解析程序URL)。如果有需求,我可以考虑如何使其更具可配置性。