【问题标题】:sbt multi-module project: dependence between projectssbt 多模块项目:项目之间的依赖
【发布时间】:2015-11-10 20:47:52
【问题描述】:

我是 Scala 新手,所以我希望这个问题不要太天真。

假设我有一个multi-module sbt-project 并且项目之间存在依赖关系。

  lazy val core = (project in file("core")).
    settings( ... )

  lazy val utils = (project in file("utils")).
    settings( ... ).dependsOn(core)

问题,.dependsOn(core) 是否意味着如果我这样做 projects utils; compile 它会事先转到compile core(并使用其最新版本)?

我问这个,因为在实践中我没有看到这种行为(我想要它)。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    您正在寻找aggregate 方法。像这样:

    lazy val utils = (project in file("utils")).
      settings( ... ).dependsOn(core).aggregate(core)
    

    这里的聚合方法导致在utils 上运行的所有任务也可以在core 上运行(更新等...)。如果您想禁止任务在聚合项目上运行,您可以查看the documentation here

    【讨论】:

    • 谢谢!所以添加了aggregate 选项并且它起作用了;但是,如果现在在utils 内我确实在本地发布会发生什么? published 包是否会包含 core
    • 发布的包将始终包含核心,因为您依赖它。如果你这样离开它,publish 命令也将在core 上运行。您可以禁止在其他项目上运行特定命令。我将使用此信息和相关文档的链接更新我的答案。
    【解决方案2】:

    是的,您应该看到这种行为(我在实践中确实看到了)。正如链接文档所说(注意utilcore 的角色在那里相反:core 取决于util):

    这也会在编译项目时创建项目之间的排序;必须先更新和编译 util,然后才能编译内核

    【讨论】:

    • 其他答案所说的aggregate 设置怎么样?你怎么看?
    • 另外我不明白你为什么说依赖是相反的;就像文档中所说的“foo dependsOn(bar) 意味着foo 中的编译配置取决于bar 中的编译配置。” scala-sbt.org/0.13/tutorial/Multi-Project.html
    • 同样的逻辑utils依赖core。我说的对吗?
    • @Daniel 他们的例子有lazy val core = project.dependsOn(util)
    • @Daniel 和aggregate 不应该是必需的,但是是的,它会产生编译utils 也会编译core 的效果;不过,我不知道它是否提供了关于排序的任何额外保证,所以如果dependsOn 不够,它可以先编译utils 目录中的文件,然后再编译core
    猜你喜欢
    • 2014-02-26
    • 2018-03-20
    • 2016-12-18
    • 1970-01-01
    • 2015-08-24
    • 2011-08-27
    • 1970-01-01
    • 2013-01-19
    • 2018-04-26
    相关资源
    最近更新 更多