1. 运行

运行 

本页描述了在设置好项目后如何使用 sbt。它假设你已经安装了 sbt,并且已经完成了sbt 实例

sbt shell 

在你的项目目录中运行 sbt,不带任何参数

$ sbt

运行 sbt 而不带任何命令行参数将启动 sbt shell。sbt shell 有一个命令提示符(带有制表符完成和历史记录!)。

例如,你可以在 sbt shell 中输入 compile

> compile

要再次 compile,请按向上箭头键,然后按回车键。

要运行你的程序,请输入 run

要退出 sbt shell,请输入 exit 或使用 Ctrl+D(Unix)或 Ctrl+Z(Windows)。

批处理模式 

你也可以在批处理模式下运行 sbt,将空格分隔的 sbt 命令列表作为参数传递。对于接受参数的 sbt 命令,通过将命令和参数用引号括起来,将它们作为单个参数传递给 sbt。例如,

$ sbt clean compile "testOnly TestA TestB"

在这个例子中,testOnly 有参数 TestATestB。这些命令将按顺序执行(cleancompile,然后是 testOnly)。

注意:在批处理模式下运行需要每次都启动 JVM 和 JIT,因此你的构建将运行得慢得多。在日常编码中,我们建议使用 sbt shell 或下面描述的连续构建和测试功能。

从 sbt 0.13.16 开始,在 sbt 中使用批处理模式将发出一个信息性启动消息,

$ sbt clean compile
[info] Executing in batch mode. For better performance use sbt's shell
...

它只会在 sbt compile 时触发,也可以用 suppressSbtShellNotification := true 来抑制。

连续构建和测试 

为了加快你的编辑-编译-测试循环,你可以让 sbt 在你保存源文件时自动重新编译或运行测试。

通过在命令前加上 ~,使命令在发生一个或多个源文件更改时运行。例如,在 sbt shell 中尝试

> ~testQuick

按回车键停止监视更改。

你可以在 sbt shell 或批处理模式中使用 ~ 前缀。

请参阅 触发执行,了解更多详细信息。

常用命令 

以下是一些最常用的 sbt 命令。要获得更完整的列表,请参阅 命令行参考

命令 描述
clean 删除所有生成的文件(在target目录中)。
compile 编译主源代码(在src/main/scalasrc/main/java目录中)。
test 编译并运行所有测试。
console 启动 Scala 解释器,其类路径包括编译后的源代码和所有依赖项。要返回到 sbt,请输入:quit、Ctrl+D(Unix)或 Ctrl+Z(Windows)。
run <argument>* 在与 sbt 相同的虚拟机中运行项目的 main 类。
package 创建一个 jar 文件,其中包含src/main/resources中的文件以及从src/main/scalasrc/main/java.
help <command> 显示指定命令的详细帮助。如果没有提供命令,则显示所有命令的简短描述。
reload 重新加载构建定义(build.sbt, project/*.scala, project/*.sbt文件)。如果更改了构建定义,则需要重新加载。

制表符完成 

sbt shell 有制表符完成,包括在空提示符处。一个特殊的 sbt 约定是,按一次制表键可能只会显示最有可能的完成的子集,而按多次制表键则会显示更详细的选择。

sbt shell 历史记录 

sbt shell 会记住历史记录,即使你退出 sbt 并重新启动它也是如此。访问历史记录的最简单方法是按向上箭头键循环浏览以前输入的命令。

注意Ctrl-R 会向后增量搜索历史记录。

通过 JLine 与终端环境的集成,你可以通过更改 $HOME/.inputrc 文件来自定义 sbt shell。例如,$HOME/.inputrc 中的以下设置将允许向上和向下箭头执行基于前缀的历史记录搜索。

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

sbt shell 还支持以下命令

命令 描述
! 显示历史记录命令帮助。
!! 再次执行上一个命令。
!: 显示所有先前的命令。
!:n 显示最后n个命令。
!n 执行索引为n的命令,如!:命令所示。
!-n 执行此命令之前的第 n 个命令。
!string 执行最近以 'string.' 开头的命令。
!?string 执行最近包含 'string' 的命令。