【问题标题】:How to reuse SBT module project definitions如何重用 SBT 模块项目定义
【发布时间】:2011-06-10 22:29:00
【问题描述】:

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

澄清:

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

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

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

The same directory is used for output for multiple projects

所以我将 AppDaoCore 项目定义复制到父项目定义中。即在父项目的单个构建文件中声明所有项目及其依赖项。

现在一切正常。

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

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

我怎样才能避免这种情况?

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

你怎么看?
您可能还有其他想法吗?

【问题讨论】:

    标签: scala code-reuse sbt


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2018-05-05
    • 2018-04-26
    • 1970-01-01
    • 2016-12-18
    • 2021-12-02
    • 2014-03-19
    • 2016-01-04
    • 2016-10-05
    • 2015-11-10
    相关资源
    最近更新 更多