根据SBT documentation,"通过声明类型为Project的延迟val来定义项目。"
这当然是常态,而且正是我们正在做的事情,但我想知道如果有什么是它需要懒惰的原因。
使用常规val
代替lazy val
似乎可以正常工作。当然,使用严格的val会导致项目定义按顺序初始化,这意味着前向引用不起作用,需要按依赖顺序定义项目。
对于一个相对较大的构建,有53个相互依赖的项目,强制执行的命令实际上是一个Good Thing™,所以我想知道是否存在使用延迟val的实际原因 - 除了允许定义以任意方式发生顺序。
答案 0 :(得分:5)
这是一种常见的“最佳做法”。我没有看到任何人明确说明这一点,但根据我的经验,这种做法与sbt的一些特征有关。
html, body {
height: 100%;
overflow: hidden;
}
.wrapper {
margin: 0 auto;
padding: 40px;
max-width: 800px;
}
.mytable {
height: 100%;
overflow: auto;
margin: 0 0 40px 0;
width: 100%;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
display: table;
table-layout: fixed;
}
文件*.sbt
个文件现在假设您想构建*.sbt
以便于阅读。我们有一些常见的设置和3个项目(一个根和两个版本)
build.sbt
sbt将无法启动,因为此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")
build.sbt
和api
模块在server
项目定义之前被引用root
在所有项目中的定义之前被引用如果没有制作所有内容commonSettings
,则很难重构构建文件。这就是所有sbt文档每次使用lazy
的原因。为了避免首次使用者感到困惑和沮丧。
希望有所帮助, 缪奇