如何在SBT(Play)多项目中使用共享配置?

Jxt*_*tps 5 scala sbt playframework playframework-2.2

我有几个SBT 0.13/Play 2.2项目(网站).它们都是多模块,因为它们共享一些共同的功能.这使得他们的项目配置文件既复杂又几乎相同,但并不完全相同.

我希望能够在项目中尽可能多地共享这些配置文件(频繁的播放更新使得5个以上的网站保持最新的王室痛苦,更不用说所有几乎完全相同但不断发展的依赖列表项目).

build.properties和plugins.sbt在各个项目中是相同的,可以通过简单的脚本覆盖.大.

Build.scala比较棘手 - 我想介绍一个像这样的共享基类:

abstract class MyBuildBase extends Build { ... }
Run Code Online (Sandbox Code Playgroud)

在Build.scala中:

object ApplicationBuild extends MyBuildBuild { ... }
Run Code Online (Sandbox Code Playgroud)

为了使其具有任何意义,需要跨项目共享MyBuildBase.scala.这可以通过svn:external来完成,它在目录上运行.这意味着我需要在编译Build.scala时以某种方式使这个共享目录可访问(否则sbt会大声抱怨).

阅读http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Classpaths.htmlhttp://www.scala-sbt.org/0.13.0/docs/Getting-Started/Full -Def.html似乎这应该是可能的.

然而,这是非常不清楚我居然把什么项目/工程/ Build.scala文件实际上做到这一点-我无法找到的一个例子"这是旨在建立一个SBT构建文件和包括SBT构建文件构建中的一些额外的源文件".

有什么建议?

jsu*_*eth 7

您可能想要做的是创建一个插件或共享库.

您可以使用如下构建创建一个sbt项目:

build.sbt

sbtPlugin := true

organization := "you"

name := "common-build"

version := "1.0"
Run Code Online (Sandbox Code Playgroud)

然后在src/main/scala您的抽象类"MyBuildBase"中创建.将此项目作为sbt插件发布.

然后在您的其他项目中,您可以将其用作库/插件.另外project/plugins.sbt:

addSbtPlugin("you" % "common-build" % "1.0")
Run Code Online (Sandbox Code Playgroud)

这将在构建构建解析您的公共构建库.

如果您需要更多信息,请查看有关sbt插件的更多信息,并忽略有关制作扩展插件的内容的部分.插件只是使用sbt版本号和您自己的版本编写的库.您应该能够在那里放置您想要的任何代码以在构建之间共享.