scala - 如何重用 SBT 模块项目定义

标签 scala code-reuse sbt

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

澄清:

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

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

我在自己的项目目录中定义了AppDaoCore,( as described here )
因此它们可以被许多父项目重新使用。
但是,当我加载父项目时,SBT 给出以下错误:

同一个目录用于多个项目的输出

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

现在一切正常。

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

所以我需要在每个父项目中重复AppDao的定义,以避免同一个目录用于多个项目的输出项目 错误。但结果将是大量重复的项目构建代码!

如何避免这种情况?

我有一个想法:也许我可以创建一个模块,例如Dao 项目,具有声明所有 Dao 依赖项(在第 3 方库上)的 trait。那么几乎不会有重复的代码,只有 DaoCore 的依赖会在每个父项目中重复。

你觉得怎么样?
您也许还有其他想法吗?

最佳答案

将项目依赖项放入特征中,并按需混合 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 - 都可以是一个独立的项目,拥有自己的设置和依赖项。

关于scala - 如何重用 SBT 模块项目定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304635/

相关文章:

multithreading - Akka:如何确保已收到消息?

logging - 登录scala

c - 如何使用不同的运算符重用相同的 C 代码

python - 在 Flask 应用程序中重用样板代码

scala - scala 和 sbt 的新手 - 尝试编译一个导入 akka.stm._ 的项目

sbt - 选择与 sbt-native-packager 一起使用的 mainClass

scala - sbt & Play 2.0 调试信息丢失

scala - 如何在 Scala 中结合过滤器和映射?

c++ - UWP - 跨 WinRT 模块重用字符串解析函数的建议方法

scala - 如何跟踪不可变设计的依赖关系?