【问题标题】:How do I use shared configurations across SBT (Play) multi-projects?如何在 SBT (Play) 多项目中使用共享配置?
【发布时间】:2013-11-12 02:33:42
【问题描述】:

我有几个 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 似乎这应该是可能的。

但是,我非常不清楚在 project/project/Build.scala 文件中实际放入什么来实际实现这一点 - 我找不到 "一个旨在构建的 sbt 构建文件的示例一个 sbt 构建文件,并在构建中包含一些额外的源文件”

有什么建议吗?

【问题讨论】:

    标签: scala playframework sbt playframework-2.2


    【解决方案1】:

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

    您可以使用如下构建创建一个 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 的版本号和您自己的版本号的库。您应该能够将您想要的任何代码放在那里以便在构建之间共享。

    【讨论】:

    • 很好的建议。事实证明,自 v1.6 以来,SVN 可以处理外部文件而不仅仅是目录,所以我以这种方式解决了它,因为在我的特定情况下它更容易。但是,您的回答涵盖了我实际提出的问题,因此将其标记为这样。
    【解决方案2】:

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

    这是Michael Lewis 的新(2016 年 12 月)multi-module with App Scala sbt template

    用法

    sbt new lewismj/sbt-template.g8
    

    然后你可以运行:

    sbt compile
    sbt publish-local
    sbt assembly
    

    它基于Scala SBT template (Library)

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

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      相关资源
      最近更新 更多