我有几个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.html和http://www.scala-sbt.org/0.13.0/docs/Getting-Started/Full-Def.html似乎应该可以这样做。
然而,我真的不清楚实际上在项目/项目/ Build.scala文件中实际实现了什么 - 我找不到“sbt构建文件的一个例子,它打算构建一个sbt构建文件,并在构建“中包含一些额外的源文件。
有什么建议吗?
答案 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构建文件。