gpt4 book ai didi

sbt - 为什么 SBT 项目被声明为惰性验证?

转载 作者:行者123 更新时间:2023-12-04 08:21:07 25 4
gpt4 key购买 nike

根据 SBT documentation , "一个项目是通过声明一个 Project 类型的惰性值来定义的。"

这当然是常态,也是我们正在做的事情,但我想知道如果有的话,它需要懒惰的原因是什么。

使用常规 val而不是 lazy val似乎工作。当然,使用严格的 val 会导致项目定义按顺序初始化,这意味着前向引用不起作用,需要按依赖顺序定义项目。

对于一个相对较大的构建,有 53 个相互依赖的项目,强制执行排序实际上是一件好事™,所以我想知道是否有使用惰性验证的实际原因——除了允许以任意顺序发生定义。

最佳答案

这是一种常见的“最佳实践”。我还没有看到任何人明确说明这一点,但根据我的经验,这种做法与 sbt 的一些特性有关。

  • sbt 解析 任意 *.sbt文件
  • sbt 评估 *.sbt文件从上到下
  • 您可以在多个 sbt 文件中的所有内容之间创建依赖关系

  • 现在想象一下你想要构建你的 build.sbt为了可读性。我们有一些通用设置和 3 个项目(一个根和两个构建)
    val root = project.in(file("."))
    .settings(commonSettings)
    .aggregate(api, server)

    val api = project.in(file("api"))
    .settings(commonSettings)
    .settings(name := "server")

    val server= project.in(file("api"))
    .settings(commonSettings)
    .settings(name := "api")
    .dependsOn(api)

    val commonSettings = Seq(organization := "com.example")

    sbt 不会启动,因为 build.sbt 中有多个错误
  • apiserver root 中引用了模块项目未定义
  • commonSettings在所有项目中在其定义之前被引用

  • 不做任何事 lazy很难重构你的构建文件。这就是所有 sbt 文档使用 lazy val 的原因。每一个。为了避免初次使用的用户感到困惑和沮丧。

    希望有帮助,
    向木

    关于sbt - 为什么 SBT 项目被声明为惰性验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46568246/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com