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

时间:2013-10-31 22:13:42

标签: scala playframework sbt playframework-2.2

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

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

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

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

abstract class MyBuildBase extends Build { ... }

在Build.scala中执行:

object ApplicationBuild extends MyBuildBuild { ... }

为了使这一点有意义,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构建文件,并在构建“中包含一些额外的源文件。

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

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

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

build.sbt

sbtPlugin := true

organization := "you"

name := "common-build"

version := "1.0"

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

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

addSbtPlugin("you" % "common-build" % "1.0")

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

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

答案 1 :(得分:0)

注意:在2016年,Build.scala已弃用Build.sbt

以下是multi-module with App Scala sbt template的新内容(2016年12月)Michael Lewis

  

用法

sbt new lewismj/sbt-template.g8
  

然后您可以运行:

sbt compile
sbt publish-local
sbt assembly

它基于Scala SBT template (Library)

  

此giter8模板将为Scala库编写SBT构建文件。