解释SBT语法,如compile:compile

时间:2013-07-11 22:11:40

标签: scala sbt

尽管SBT被称为简单构建工具,但它远​​非简单。我仍然无法在compile:compile这样的sbt会话中获得此语法?这和compile之间的区别是什么?

1 个答案:

答案 0 :(得分:2)

这里的主要技巧是在范围内。如果你想真正理解SBT是如何工作的,那么总是使用三个命令:

show <setting> - 显示指定设置的值 show <task> - 评估指定的任务并显示任务返回的值。

inspect <key> - 显示有关设置的信息

inspect tree <key> - 在树形结构中显示key及其依赖项。

还有许多其他好的命令,但这有助于您最大程度地理解SBT的基础知识。

至于语法。每个版本都包含settingstasksprojectsscopes。关于他们的说法太多了,官方site给出了很好的解释。你给出的语法就是这个术语,例如我们来看看:

compile:scalaSource::sourceDirectory
   1         2             3

1 - 它是一个编译范围
2 - 它是依赖设置
3 - 依赖设置

如果您输入inspect scalaSource,您会看到,如果您在SBT会话中仅输入scalaSource,则会在scalaSource compile scope中呼叫compile:scalaSource }),这解释了compile:compilecompile之间的区别,这是相同的(在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