尽管SBT被称为简单构建工具,但它远非简单。我仍然无法在compile:compile
这样的sbt会话中获得此语法?这和compile
之间的区别是什么?
答案 0 :(得分:2)
这里的主要技巧是在范围内。如果你想真正理解SBT是如何工作的,那么总是使用三个命令:
show <setting>
- 显示指定设置的值
show <task>
- 评估指定的任务并显示任务返回的值。
inspect <key>
- 显示有关设置的信息
inspect tree <key>
- 在树形结构中显示key
及其依赖项。
还有许多其他好的命令,但这有助于您最大程度地理解SBT的基础知识。
至于语法。每个版本都包含settings
,tasks
,projects
和scopes
。关于他们的说法太多了,官方site给出了很好的解释。你给出的语法就是这个术语,例如我们来看看:
compile:scalaSource::sourceDirectory
1 2 3
1 - 它是一个编译范围
2 - 它是依赖设置
3 - 依赖设置
如果您输入inspect scalaSource
,您会看到,如果您在SBT会话中仅输入scalaSource
,则会在scalaSource
compile scope
中呼叫compile:scalaSource
}),这解释了compile:compile
和compile
之间的区别,这是相同的(在inspect
上调用compile
)。您应该在inspect scalaSource
中查看的第二件事是Dependencies:
部分:compile:sourceDirectory
,因此scalaSource
取决于sourceDirectory
中的compile:sourceDirectory
设置如果你在github上看到了一些构建,在*.sbt
或*.scala
构建文件中,它就像:
sourceDirectory in (Compile, scalaSource) := ....
只是为了练习,请致电:
show compile:scalaSource::sourceDirectory
你会看到如下输出:<project-dir>/src/main
然后调用:
set sourceDirectory in (Compile, scalaSource) <<= baseDirectory(_ / "src" / "sc")
然后再次:
show compile:scalaSource::sourceDirectory