如何重用SBT模块项目定义

时间:2011-06-10 09:45:19

标签: scala code-reuse sbt

如何共享Simple Build Tool 模块项目的定义
在许多项目之间?
同时
  在每个父项目构建文件中包含模块项目定义吗?

澄清:

我有一个父项目,一个 Dao 模块项目和一个 App 模块项目和一个 Core 项目。两个模块项目(即 Dao App )都依赖于(完全相同的版本) Core

Parent project
  |
  |--> app
  |     `--> core
  |
  `--> dao
        `--> core

我在自己的项目目录中定义了 App Dao Core ,(as described here
所以他们可以被很多家长项目所取代 但是,当我加载父项目时,SBT会出现此错误:

The same directory is used for output for multiple projects

因此我将 App Dao Core 项目定义复制到父项目定义中。也就是说,在父项目的单个构建文件中声明所有项目及其依赖项。

现在一切正常。

然而,我有很多家长项目。每个父项目使用不同版本的 App 项目和 Dao 项目。 (DAO =数据访问对象 - 例如数据库存储或文件存储,因项目而异。)

所以我需要在每个父项目中重复 App Dao 的定义,以避免The same directory is used for output for multiple projects 错误。但结果将是许多重复的项目构建代码!

我该如何避免这种情况?

我有一个想法:也许我可以创建一个模块,例如 Dao 项目,trait声明所有 Dao 的依赖项(在第三方库上)。然后几乎没有重复的代码,只有 Dao Core 上的依赖关系才会在每个父项目中重复。

你怎么看? 你或许有其他一些想法吗?

1 个答案:

答案 0 :(得分:4)

将项目依赖项置于特征中,并按需将其混合is one of the options

但是,我建议你研究一下SBT 0.10(无论如何你将不得不迁移到它一天)。在新的SBT中,它可以像

一样简单
import sbt._

object RootProject extends Build
{
        lazy val projects = Seq(root, core, dao, app)

        override val root = Project("root", file(".")) aggregate(core, dao, app)
        lazy val core  = Project("core", file("core"))
        lazy val app  = Project("app", file("app")) dependsOn(core)
        lazy val dao = Project("dao", file("dao")) dependsOn(core)
}

,任何项目 - coreappdao - 都可以是独立项目,具有自己的设置和依赖项。