1. 命令行参考

命令行参考 

本页列出了您可以在 sbt 交互式提示符中或在批处理模式下使用的命令行选项、命令和任务的完整列表。有关基本知识的介绍,请参见入门指南中的运行,而本页则提供了更多详细信息。

有关命令行的说明 

  • 在 sbt 中,任务(位于构建定义“内部”)和命令(操纵构建定义本身)之间存在技术上的区别。如果您有兴趣创建命令,请参见命令。由于“命令”在 sbt 中具有特定含义,因此没有好的通用术语来描述“您可以在 sbt 提示符下键入的内容”,这可能是设置、任务或命令。
  • 某些任务会生成有用的值。这些值的toString表示可以通过show <task>来显示,以运行任务,而不仅仅是<task>
  • 在多项目构建中,执行依赖关系和聚合设置会控制执行来自哪些项目的哪些任务。有关多项目构建的详细信息,请参见多项目构建

项目级任务 

  • clean 删除所有生成的文件(target目录)。
  • publishLocal 将工件(例如 jar)发布到本地 Ivy 仓库,如发布中所述。
  • publish 将工件(例如 jar)发布到由 publishTo 设置定义的仓库中,如发布中所述。
  • update 解析并检索外部依赖项,如库依赖项中所述。

配置级任务 

配置级任务是与配置关联的任务。例如,compile(等效于Compile/compile)会编译主源代码(compile配置)。Test/compile会编译测试源代码(test配置)。compile配置中的大多数任务在test配置中都有等效项,可以使用Test/前缀来运行这些等效项。

  • compile 编译主源代码(在src/main/scala目录中)。Test/compile编译测试源代码(在src/test/scala/目录中)。
  • console 启动 Scala 解释器,其类路径包含已编译的源代码、lib 目录中的所有 jar 和托管库。要返回到 sbt,请键入:quit、Ctrl+D(Unix)或 Ctrl+Z(Windows)。类似地,Test/console 会启动包含测试类和类路径的解释器。
  • consoleQuick 启动 Scala 解释器,其类路径包含项目的编译时依赖项。Test/consoleQuick 使用测试依赖项。此任务与 console 不同,因为它不会强制编译当前项目的源代码。
  • consoleProject 使用 sbt 和构建定义在类路径上进入交互式会话。构建定义和相关值绑定到变量,并且导入常见的包和值。有关更多信息,请参见consoleProject 文档
  • doc 使用 scaladoc 为src/main/scala中的 Scala 源文件生成 API 文档。Test/docsrc/test/scala中的源文件生成 API 文档。
  • package 创建一个 jar 文件,其中包含src/main/resources中的文件和从src/main/scala编译的类。Test/package创建一个包含src/test/resources中的文件和从src/test/scala编译的类的 jar 文件。
  • packageDoc 创建一个包含从src/main/scala中的 Scala 源文件生成的 API 文档的 jar 文件。Test/packageDoc 创建一个包含测试源文件src/test/scala中 API 文档的 jar 文件。
  • packageSrc:创建一个包含所有主源文件和资源的 jar 文件。打包的路径相对于src/main/scalasrc/main/resources。类似地,Test/packageSrc 对测试源文件和资源进行操作。
  • run <argument>* 在与 sbt 相同的虚拟机中运行项目的 main 类。main 类将传递提供的参数。有关此操作运行的代码中使用 System.exit 和多线程(包括 GUI)的详细信息,请参见运行项目代码Test/run会运行测试代码中的 main 类。
  • runMain <main-class> <argument>* 在与 sbt 相同的虚拟机中运行项目中指定的 main 类。main 类将传递提供的参数。有关此操作运行的代码中使用 System.exit 和多线程(包括 GUI)的详细信息,请参见运行项目代码Test/runMain会运行测试代码中指定的 main 类。
  • test 运行测试编译期间检测到的所有测试。有关详细信息,请参见测试
  • testOnly <test>* 运行作为参数提供的测试。*(将)解释为测试名称中的通配符。有关详细信息,请参见测试
  • testQuick <test>* 运行作为参数指定的测试(如果未提供参数,则运行所有测试),这些测试

    1. 尚未运行过 OR
    2. 上次运行时失败 OR
    3. 自上次成功运行以来,其任何传递依赖项都已重新编译*(将)解释为测试名称中的通配符。有关详细信息,请参见[测试][Testing]。

通用命令 

  • exitquit 结束当前交互式会话或构建。此外,Ctrl+D(Unix)或 Ctrl+Z(Windows)将退出交互式提示符。
  • help <command> 显示指定命令的详细帮助。如果命令不存在,help 将列出与参数匹配的命令的详细帮助,参数解释为正则表达式。如果未提供命令,则显示主要命令的简要说明。相关命令是任务和设置。
  • projects [add|remove <URI>] 如果未提供任何参数,则列出所有可用项目,或者添加/删除提供的 URI 处的构建。有关多项目构建的详细信息,请参见多项目构建
  • project <project-id> 将当前项目更改为 ID 为<project-id>的项目。进一步的操作将在给定项目的上下文中执行。有关多项目构建的详细信息,请参见多项目构建
  • ~ <command> 每当源文件更改时,执行项目指定的动作或方法。有关详细信息,请参见触发执行
  • < filename 执行给定文件中的命令。每个命令都应该在它自己的行上。空行和以 ’#’ 开头的行将被忽略
  • + <command> 为 crossScalaVersions 设置中定义的所有 Scala 版本执行项目指定的动作或方法。
  • ++ <version|home-directory> <command> 暂时更改构建项目的 Scala 版本,并执行提供的命令。<command> 是可选的。指定的 Scala 版本将一直使用,直到项目重新加载、设置被修改(例如,通过 set 或 session 命令)或再次运行 ++。<version> 不需要列在构建定义中,但它必须在仓库中可用。或者,指定 Scala 安装的路径。
  • ; A ; B 执行 A,如果成功,则运行 B。请注意,需要在开头添加分号。
  • eval <Scala-expression> 评估给定的 Scala 表达式并返回结果和推断类型。这可以用于设置系统属性、用作计算器、分叉进程等等。例如

    > eval System.setProperty("demo", "true")
    > eval 1+1
    > eval "ls -l" !
    

用于管理构建定义的命令 

  • reload [plugins|return] 如果没有指定参数,则重新加载构建,必要时重新编译任何构建或插件定义。reload plugins 将当前项目更改为构建定义项目(在 project/ 中)。这对于直接操作构建定义非常有用。例如,在构建定义项目上运行 clean 将强制更新快照并重新编译构建定义。reload return 更改回主项目。
  • set <setting-expression> 评估并应用给定的设置定义。该设置将应用,直到 sbt 重新启动、构建重新加载或该设置被另一个 set 命令覆盖或被 session 命令删除。有关详细信息,请参阅 .sbt 构建定义检查设置
  • session <command> 管理由 set 命令定义的会话设置。它可以持久化在提示符处配置的设置。有关详细信息,请参阅 检查设置
  • inspect <setting-key> 显示有关设置的信息,例如值、描述、定义范围、依赖项、委托链和相关设置。有关详细信息,请参阅 检查设置

Sbt 运行器参数 

从 OS shell 启动 sbt 运行器时,可以指定各种系统属性或 JVM 附加选项来影响其行为。

sbt JVM 选项和系统属性 

如果在 sbt 启动时定义了 JAVA_OPTS 和/或 SBT_OPTS 环境变量,则其内容将作为命令行参数传递给运行 sbt 的 JVM。

如果在当前目录中存在名为 .jvmopts 的文件,则其内容将在 sbt 启动时追加到 JAVA_OPTS。类似地,如果 .sbtopts 和/或 /etc/sbt/sbtopts 存在,则其内容将追加到 SBT_OPTSJAVA_OPTS 的默认值为 -Dfile.encoding=UTF8

您还可以直接将 JVM 系统属性和命令行选项指定为 sbt 参数:任何 -Dkey=val 参数都将按原样传递给 JVM,任何 -J-Xfoo 都将作为 -Xfoo 传递。

另请参阅 sbt --help 以获取更多详细信息。

sbt JVM 堆、permgen 和堆栈大小 

如果您发现自己运行时 permgen 空间不足或工作站内存不足,请根据任何 java 应用程序调整 JVM 配置。

例如,一组常见的与内存相关的选项是

export SBT_OPTS="-Xmx2048M -Xss2M"
sbt

或者,如果您希望只为本次会话指定它们

sbt -J-Xmx2048M -J-Xss2M

启动目录 

sbt 只是一个引导程序,sbt 的实际内容,Scala 编译器和标准库默认情况下会下载到共享目录 $HOME/.sbt/boot/

要更改此目录的位置,请设置 sbt.boot.directory 系统属性。相对路径将相对于当前工作目录解析,如果您想避免在项目之间共享启动目录,这可能很有用。例如,以下使用 0.11 之前的风格将启动目录放在 project/boot/

sbt -Dsbt.boot.directory=project/boot/

终端编码 

终端使用的字符编码可能与您平台的 Java 默认编码不同。在这种情况下,您需要指定 file.encoding=<encoding> 系统属性,这可能看起来像

export JAVA_OPTS="-Dfile.encoding=Cp1252"
sbt

HTTP/HTTPS/FTP 代理 

在 Unix 上,sbt 将从标准 http_proxyhttps_proxyftp_proxy 环境变量中获取任何 HTTP、HTTPS 或 FTP 代理设置。如果您位于需要身份验证的代理后面,则需要在 sbt 启动时传递一些补充标志。有关更多详细信息,请参阅 JVM 网络系统属性

例如

sbt -Dhttp.proxyUser=username -Dhttp.proxyPassword=mypassword

在 Windows 上,您的脚本应设置代理主机、端口以及可选的用户名和密码的属性。例如,对于 HTTP

sbt -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=mypassword

在上面的命令行中将 http 替换为 httpsftp 以配置 HTTPS 或 FTP。

其他系统属性 

以下系统属性也可以传递给 sbt

属性 默认值 含义
sbt.banner 布尔值 true(在 1.3+ 中) 显示一个欢迎横幅,宣传新功能。
sbt.boot.directory 目录 ~/.sbt/boot 共享启动目录的路径。如果您在 CI 环境中使用 sbt 并且希望在运行之间缓存 sbt 启动类,则应明确定义sbt.boot.directory
sbt.boot.properties 文件 大致sbt.boot.propertiessbt 启动器内部,特定于 sbt 版本。 查找 sbt 启动属性 文件的路径。这可以是相对路径,相对于 sbt 基目录、用户主目录或 sbt jar 文件的位置,也可以是绝对路径或绝对文件 URI。
sbt.ci 布尔值 false(除非然后 env varBUILD_NUMBER已设置) 用于持续集成环境。抑制超级外壳和颜色。
sbt.client 布尔值 false
sbt.color 字符串 auto 取代sbt.log.format。要打开颜色,请使用alwaystrue。要关闭颜色,请使用neverfalse>。如果输出是支持颜色的终端(而不是管道),则使用颜色,请使用auto.
sbt.coursier 布尔值 true(在 1.3+ 中) 使用 coursier 来检索包。(另请参阅sbt.ivy.)
sbt.coursier.home 目录 CoursierDependencyResolution.defaultCacheLocation(在 1.3+ 中) coursier 工件缓存的位置,其中默认值由 Coursier 缓存解析逻辑 定义。您可以使用命令 `csrCacheDirectory` 验证该值。如果您在 CI 环境中使用 coursier 并且希望在运行之间缓存工件,则应明确定义sbt.coursier.home
sbt.extraClasspath 类路径条目 (jar 文件或目录) 添加到 sbt 的类路径。请注意,这些条目由逗号分隔,例如entry1, entry2,..。另请参阅resourcesbt 启动器 文档中。
sbt.genbuildprops 布尔值 true 生成build.properties如果缺少。如果未设置,则将委派给sbt.skip.version.write.
sbt.global.base 目录 $HOME/.sbt/1.0 包含全局设置和插件的目录。
xsbt.inc.debug 布尔值 false 增量调试器的额外调试。
sbt.ivy 布尔值 true(在 <1.3 中) 使用 ivy 来检索包。
sbt.ivy.home 目录 ~/.ivy2 包含本地 Ivy 存储库和工件缓存的目录。如果您在 CI 环境中使用 sbt 并且希望在运行之间缓存 ivy 工件,则应明确定义sbt.ivy.home
sbt.log.noformat 布尔值 false 如果为 true,则禁用 ANSI 颜色代码。在不支持颜色的构建服务器或终端上很有用。
sbt.main.class 字符串 sbt.xMain 要使用的 sbt 类 (替代方案 包括sbt.ConsoleMainsbt.ScriptMain).
sbt.offline 布尔值 false 避免从存储库中检索类。
sbt.override.build.repos 布尔值 false 如果为 true,则会忽略构建定义中配置的存储库,而是使用为启动器配置的存储库。请参阅sbt.repository.configsbt 启动器 文档。
sbt.progress 字符串 ? 使用always以显示进度(“超级外壳”)。
sbt.repository.config 文件 ~/.sbt/repositories 包含要用于启动器的存储库的文件。格式与[repositories]部分的 sbt 启动器 配置文件相同。此设置通常与设置一起使用sbt.override.build.repostrue(请参阅sbt.override.build.repossbt 启动器 文档)。
sbt.resident.limit 数字 0 要保留的 Scala 编译器数量。此实验性功能旨在缩短编译时间。它似乎没有成功,此标志可能会被删除。
sbt.skip.version.write 布尔值 false 生成build.properties如果缺少。请参阅sbt.genbuildprops.
sbt.supershell 布尔值 true如果启用了颜色 使用超级外壳(在 shell 底部显示进度)。
sbt.supershell.sleep 数字 100 更新超级外壳进度区域之间等待的时间。
sbt.task.timings 布尔值 false 测量运行任务所花费的时间。
sbt.task.timings.omit.paths 布尔值 false 在报告计时时省略路径。
sbt.task.timings.on.shutdown 布尔值 false 在 JVM 关闭时报告计时(而不是在任务完成时)。
sbt.task.timings.threshold 字符串 0 如果低于此阈值,则从计时报告中省略项目。
sbt.traces 布尔值 false 为任务生成 Chrome 跟踪事件格式日志。
sbt.turbo 布尔值 false 使用额外的分层类加载器。
sbt.version 版本 1.9.8 要使用的 sbt 版本,通常从project/build.properties.
sbt.watch.mode 字符串 auto 如果polling,则定期检查文件系统是否有更新。