1. sbt 1.1.x 版本

sbt 1.1.x 版本 

sbt 1.1.6 

错误修复 

  • 修复了 Unix/Linux 的文件监视问题。 io#150 by @eatkins
  • 修复了 packageBin 在文件被删除时不创建文件的问题。 sbt/sbt#4161 by @dadarakt
  • 修复了 help -v 渲染多行描述的问题。 #4160 by @ninjalama
  • 修复了 —error 等设置日志级别的问题。 #4162 by @holdenk
  • 处理了将 managedSources 写入非托管源代码目录的问题。 #4099 by @eatkins
  • 修复了 EventMonitor 中溢出处理的问题。 io#155 by @eatkins
  • UpdateLogging.Full 下恢复了“解析中…”日志。 lm#240 by @hodga
  • 修复了 -Dconfig.resource=/path/to/configFile 与 Gigahorse 冲突的问题。 lm#241 by @tanishiking
  • 删除了对过时的 ModifiedTime 方法的使用。 io#154 by @dwestheide
  • 修复了 Windows 上的测试问题。 io#153 by @OlegYch

贡献者 

感谢所有通过使用、报告错误、改进文档、移植构建、移植插件以及提交和审查拉取请求来帮助改进 sbt 和 Zinc 1 的人。

sbt 1.1.6 由 15 位贡献者完成,根据 sbt、zinc、librarymanagement、util、io、launcher-package 和网站上的 git shortlog -sn --no-merges v1.1.5...v1.1.6:Ethan Atkins、Eugene Yokota、Dale Wijnand、Aaron S. Hawley、OlegYch、Richard Summerhayes、Jannis (dadarakt)、Rikito Taniguchi (tanishiking)、Øyvind Høisæther、Daniel Westheide、Harrison Houghton、Holden Karau、Håkon Wold、Jason Zaugg 和 tekay。


sbt 1.1.5 

错误修复 

改进 

监视器改进 

从 sbt 1.1.4 开始,Ethan Atkins 为触发执行 ~ 监视器贡献了修复和改进。sbt 1.1.5 应该修复了文件修改事件与命令执行之间的延迟。

VS Code 扩展更新 

我们发布了一个新的 sbt VS Code 扩展,它可以在嵌入式终端窗口中启动 sbt 会话。这由 Robert Walker (@WalkingOlof) 在 sbt#4130 中贡献。

sbt 实例 

我们在 sbt 文档中添加了 sbt 实例。这是一个单页指南,引导你从零开始在 Docker 上构建一个应用程序,灵感来自 William Narmontas (@ScalaWilliam) 的 Essential sbt,并很大程度上基于它。

贡献者 

感谢所有通过使用、报告错误、改进文档、移植构建、移植插件以及提交和审查拉取请求来帮助改进 sbt 和 Zinc 1 的人。

sbt 1.1.5 由 21 位贡献者完成,根据 sbt、zinc、librarymanagement、util、io、launcher-package 和网站上的 git shortlog -sn --no-merges v1.1.4...v1.1.5:Eugene Yokota、Ethan Atkins、Jason Zaugg、Liu Fengyun、Antonio Cunei、Dale Wijnand、Roberto Bonvallet、Alexey Alekhin、Daniel Parks、Heikki Vesalainen、Jean-Luc Deprez、Jessica Hamilton、Kenji Yoshida (xuwei-k)、Nikita Gazarov、OlegYch、Richard Summerhayes、Robert Walker、Seth Tisue、Som Snytt、oneill 和 杨博 (Yang Bo)


sbt 1.1.4 

错误修复 

改进 

macOS 上的触发执行 

sbt 在 macOS 上一直存在触发执行问题。Ethan Atkins 通过合并来自其 CloseWatch 的 MacOSXWatchService 来修复了这个问题。感谢,Ethan!

还要感谢 Greg Methvin 和 Takari 的 directory-watcher。 #3860/#4071/io#138 by @eatkins

使用备用模式运行 sbt 

在进行性能分析时,你会遇到一些棘手的问题,比如你想分析应用程序的开始部分,但需要找出进程 ID。

为此,我们添加了 sbt.launcher.standby JVM 标志。从 sbt 1.1.4 开始,你可以运行

$ sbt -J-Dsbt.launcher.standby=20s exit

这将在执行其他操作之前倒计时 20 秒。 launcher#51 by @eed3si9n

加载性能改进 

使用火焰图(如果您还没有,请查看分析 JVM 应用程序文章),Jason Zaugg 发现构建文件的哈希代码是 sbt 启动过程中的一个热点。火焰图支持使用 Ctrl+F 过滤方法名称;当我运行它时,它显示 4.5% 的时间花在了 Eval#evalCommon 方法上。

Jason 建议,与其创建中间的 Array[Byte] 并在最后将其传递给 MessageDigest,不如以更过程化的方式将数组传递给 MessageDigest#update。在确认它有效之后,我们使用火焰图确定了文件时间戳代码是下一个瓶颈,因此将其切换为使用 NIO。经过这两项更改后,Eval#evalCommon 的占用率降至 2.3%。

这意味着您的构建在 sbt 1.1.4 上加载速度略快(例如,在 akka/akka 上快了大约 0.54 秒)。#4067@eed3si9n 创建。

贡献者 

感谢所有通过使用、报告错误、改进文档、移植构建、移植插件以及提交和审查拉取请求来帮助改进 sbt 和 Zinc 1 的人。

根据 git shortlog -sn --no-merges v1.1.2...v1.1.4 在 sbt、zinc、librarymanagement、util、io、launcher-package 和网站上的记录,sbt 1.1.4 由 11 位贡献者贡献:Eugene Yokota、Dale Wijnand、杨博 (Yang Bo)、Ethan Atkins、Sam Halliday、Aaron S. Hawley、Gabriele Petronella、Jason Steenstra-Pickens、Jason Zaugg、Julien Jean Paul Sirocchi 和 aumann。


sbt 1.1.2 

错误修复 

  • 通过缓存监控服务来修复触发执行的资源泄漏问题。 #3999@eatkins 创建。
  • 修复了类加载器在 run 期间继承 Scala 编译器的依赖关系问题。 zinc#505@eed3si9n 创建。
  • 修复了分叉测试并发问题。 #4030@eatkins 创建。
  • 修复了 new 命令遗留目标目录的问题。 #4033@eed3si9n 创建。
  • 修复了处理空 Content-Type 的问题。 lm214@staale 创建。
  • 修复了 ivySettings 文件中 managedChecksums 的空处理问题。 lm#218@IanGabes 创建。
  • 添加了 sbt.boot.lock 作为 JVM 属性以选择退出锁定。 #3927@dwijnand 创建。
  • 提供 SBT_GLOBAL_SERVER_DIR 环境变量作为 UNIX 上长套接字文件路径的解决方法。 #3932@dwijnand 创建。
  • 修复了分叉运行报告“流已关闭”异常的噪声问题。 #3970@retronym 创建。
  • 修复了测试编译未包含在 VS Code 保存触发器中的问题。 #4022@tmiyamon 创建。
  • 修复了 sbt 服务器在传递数字 ID 时响应字符串 ID 的问题。 #4025@tiqwab 创建。
  • 修复了 Analysis 格式中的 getDecoder 问题。 zinc#502@jilen 创建。
  • 修复了围绕数组的 equal/hashCode 不一致问题。 zinc#513@eed3si9n 创建。
  • 在 rt 导出过程中将 java9-rt-ext-output 列入白名单。 lp#211@eatkins 创建。
  • 修复了 JDK 版本检测以支持 Java 10 友好性。 lp#219@eed3si9n@2m 创建。
  • 修复了 Windows bat 文件中的引号问题。 lp#220@ForNeVeR 创建。
  • 修复了 -error 未抑制启动日志的问题。 #4036@eed3si9n 创建。

改进 

  • 围绕日志记录的性能优化。 util#152@retronym 创建。
  • 通过缓存 Configuration 的哈希码来修复性能问题。 lm#213@retronym 创建。
  • 当 sbt 服务器上的命令失败时,返回错误代码 -33000L#3991@dwijnand 创建。
  • 允许在组织和工件中使用通配符。 #215@dhs3000 创建。
  • 更新到最新的 Jsch 以支持更强大的密钥交换算法。 lm#217@ryandbair 创建。
  • 修复了编译器桥的预加载问题。 lp#222@analytically 创建。

内部 

贡献者 

根据 git shortlog -sn --no-merges v1.1.1...v1.1.2 在 sbt、zinc、librarymanagement、util、io、launcher-package 和网站上的记录,sbt 1.1.2 由 23 位贡献者贡献:Dale Wijnand、Eugene Yokota、Jason Zaugg、Kenji Yoshida (xuwei-k)、Ethan Atkins、Martijn Hoekstra、Martynas Mickevičius、Dennis Hörsch、Hosam Aly、Antonio Cunei、Friedrich von Never、Hiroshi Ito、Ian Gabes、Jilen Zhang、Mathias Bogaert、Naohisa Murakami (tiqwab)、Philippus Baalman、Ryan Bair、Seth Tisue、Ståle Undheim、Takuya Miyamoto (tmiyamon)、Yasuhiro Tatsuno。感谢大家!


sbt 1.1.1 

错误修复 

  • 修复了“为(类)修改的名称为空”错误。 zinc#292 / zinc#484@jvican(Scala Center)创建。
  • 修复了在以 sbt console 的批处理模式运行时,在 console 中进行制表符自动完成的问题。 #3841/#3876@eed3si9n 创建。
  • 修复了在 Windows 上检索丢失文件的文件时间戳的问题。 #3871 / io#120@cunei 创建。
  • 对文件时间戳实现抛出的错误进行对齐。修复了 #3894 / io#121,由 @j-keck 创建。
  • 为 FreeBSD 添加了文件时间戳的原生支持。 #3894 / io#124@cunei 创建。
  • 修复了 JDK 10 版本字符串解析问题。 sbt/sbt-launcher-package#209@2m 创建。

改进 

  • 弃用了 Extracted#append,改用 appendWithSessionappendWithoutSession#3865@dwijnand 创建。
  • 添加了一个新的全局 Boolean 设置,名为 autoStartServer。请参见以下内容。
  • 升级了用于 sbt 交叉构建 ^^ 的 Scala 版本。 #3923@dwijnand 创建。
  • @xuwei-k 做出的许多文档维护更改。

autoStartServer 设置 

sbt 1.1.1 添加了一个新的全局 Boolean 设置,名为 autoStartServer,默认值为 true。当设置为 true 时,sbt shell 将自动启动 sbt 服务器。否则,它将不会启动服务器,直到发出 startSever 命令。这可用于出于安全原因选择退出服务器。

#3922@swaldman 创建。

贡献者 

根据 git shortlog -sn --no-merges v1.1.0 ..v1.1.0 在 sbt、zinc、librarymanagement、util、io 和网站上的记录,sbt 1.1.1 由 16 位贡献者贡献:Kenji Yoshida (xuwei-k)、Eugene Yokota、Dale Wijnand、Antonio Cunei、Steve Waldman、Arnout Engelen、Deokhwan Kim、OlegYch、Robert Walker、Jorge Vicente Cantero (jvican)、Claudio Bley、Eric Peters、Lena Brüder、Seiya Mizuno、Seth Tisue、j-keck。感谢大家!


sbt 1.1.0 

这是 sbt 1.0.x 系列的特性版本。

具有兼容性影响的特性、修复和更改 

  • sbt 服务器功能在 sbt 1.1.0 中进行了重新设计。请参见以下内容。
  • 更改 version 设置默认值为 0.1.0-SNAPSHOT,以与语义版本控制兼容。 #3577@laughedelic 创建。

特性 

  • 统一了 sbt shell 和 build.sbt 语法。请参见以下内容。

修复 

  • 修复了导致 Class.forNamerun 中无法正常工作的 ClasspathFilterzinc#473 / #3736 / #3733 / #3647 / #3608@ravwojdyla 创建。
  • 通过使 PositionImpl 线程安全来修复导致 Java 编译出现 NullPointerException 的问题。 zinc#465@eed3si9n 创建。
  • 通过防止并发修改 keysWithEvents 映射来修复 PollingWatchServiceio#90@mechkg 创建,修复了与 ~ 相关的 issue #3687#3695#3775
  • 通过尽可能使用本地代码,为 File#lastModified() 丢失毫秒精度的精度提供解决方法。 io#92/io#106@cunei 创建。
  • 修复了 IO.relativize 对相对路径不起作用的问题。 io#108@dwijnand 创建。
  • 修复了检测到多个实例时的警告消息。 #3828@eed3si9n 创建。
  • 修复了 Java 9 的过度编译错误。 zinc#450@retronym 创建。
  • 修复了对深度嵌套的 Java 类进行处理的问题。 zinc#423@romanowski 创建。
  • 修复了 JavaDoc 未打印所有错误的问题。 zinc#415@raboof 创建。
  • ScalaInstance.otherJars 中保留了 JAR 顺序。 zinc#411@dwijnand 创建。
  • 修复了包含 NL 时的使用名称问题。 zinc#449@jilen 创建。
  • 修复了 ThisProject 的处理问题。 #3609@dwijnand 创建。
  • 从 sbt 文件中转义了导入,因此,如果用户创建了一个反引号定义,则任务评估将不会失败。 #3635@panaeon 创建。
  • 从警告消息中删除了对版本 0.14.0 的引用。 #3693@saniyatech 创建。
  • 修复了 screpl 抛出“无效键:console-quick”错误。 #3762@xuwei-k 创建。
  • 恢复了对 Scala 2.13.0-M1 的支持。#461 由 @dwijnand 创建。
  • 修复了类 Unix 文件路径的编码以使用file:///#3805 by @eed3si9n
  • 修复了启动期间 Log4J2 初始化错误。 #3814 by @dwijnand

改进 

  • 根据可选的project/build.properties过滤脚本测试。请参见以下内容。
  • 添加Project#withId用于更改项目的 ID。 #3601 by @dwijnand
  • 添加了reboot dev命令,它会从启动目录中删除当前工件。这在使用 sbt 的开发版本时非常有用。 #3659 by @eed3si9n
  • reload之前添加了对 sbt 版本更改的检查。 #1055/#3673 by @RomanIakovlev
  • 添加了一个新设置insideCI,它指示 sbt 可能正在持续集成环境中运行。 #3672 by @RomanIakovlev
  • 添加nameOptionCommand特质。 #3671 by @miklos-martin
  • 在 IO 中添加 POSIX 权限操作,例如IO.chmod(..)io#76 by @eed3si9n
  • 在排除警告中使用语义版本控制来处理 sbt 1 模块。 lm#188 by @eed3si9n
  • 在代码中使用 kind-projector。 #3650 by @dwijnand
  • 使Completions中的displayOnly等方法变为严格。 #3763 by @xuwei-k

统一 sbt shell 和 build.sbt 的斜杠语法 

这为 sbt shell 和 build.sbt DSL 添加了统一的斜杠语法。与当前的<project-id>/config:intask::key不同,这添加了<project-id>/<config-ident>/intask/key,其中<config-ident>是配置(如CompileTest)的 Scala 标识符表示法。(旧的 shell 语法将继续起作用)

这些示例在 shell 和 build.sbt 中都有效。

Global / cancelable
ThisBuild / scalaVersion
Test / test
root / Compile / compile / scalacOptions
ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
Zero / Zero / name

inspect 命令现在输出可复制粘贴的内容

> inspect compile
[info] Task: sbt.inc.Analysis
[info] Description:
[info]  Compiles sources.
[info] Provided by:
[info]  ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:326
[info] Dependencies:
[info]  Compile/manipulateBytecode
[info]  Compile/incCompileSetup
....

#1812/#3434/#3617/#3620 by @eed3si9n and @dwijnand

sbt server 

sbt server 功能已重新设计,以使用语言服务器协议 3.0 (LSP) 作为线协议,该协议由 Microsoft 为 Visual Studio Code 创建。

为了发现正在运行的服务器,sbt 1.1.0 会在构建相对于./project/target/active.json的位置创建一个端口文件

{"uri":"local:///Users/foo/.sbt/1.0/server/0845deda85cb41abcdef/sock"}

local:表示一个 UNIX 域套接字。以下是我们如何使用nc与服务器打招呼。(^M可以发送Ctrl-V,然后Return

$ nc -U /Users/foo/.sbt/1.0/server/0845deda85cb41abcdef/sock
Content-Length: 99^M
^M
{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "initializationOptions": { } } }^M

sbt server 为 sbt 的 shell 命令添加了网络访问,因此除了接受来自终端的输入外,服务器还接受来自网络的输入。以下是我们如何调用compile

Content-Length: 93^M
^M
{ "jsonrpc": "2.0", "id": 2, "method": "sbt/exec", "params": { "commandLine": "compile" } }^M

正在运行的 sbt 会话现在应该排队compile,并在有编译器警告和错误的情况下返回。

Content-Length: 296
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:/Users/foo/work/hellotest/Hello.scala","diagnostics":[{"range":{"start":{"line":2,"character":26},"end":{"line":2,"character":27}},"severity":1,"source":"sbt","message":"object X is not a member of package foo"}]}}

#3524/#3556 by @eed3si9n

VS Code 扩展 

我们对 sbt server 的主要用例是工具集成,例如编辑器和 IDE。作为概念证明,我们创建了一个名为Scala (sbt)的 Visual Studio Code 扩展。

目前,该扩展能够

使用project/build.properties过滤脚本测试 

对于所有存在project/build.properties的脚本测试,都会读取sbt.version属性的值。如果它的二进制版本与sbtBinaryVersion in pluginCrossBuild不同,则测试将被跳过,并会记录一条指示此情况的消息。

这允许您定义跟踪最小支持 sbt 版本的脚本测试,例如 0.13.9 和 1.0.0-RC2。 #3564/#3566 by @jonas

贡献者 

根据 sbt、zinc、librarymanagement、util、io 和网站上的git shortlog -sn --no-merges v1.0.4..v1.1.0,sbt 1.1.0 由 33 位贡献者完成:Eugene Yokota、Dale Wijnand、Antonio Cunei、Kenji Yoshida (xuwei-k)、Alexey Alekhin、Simon Schäfer、Jorge Vicente Cantero (jvican)、Miklos Martin、Jeffrey Olchovy、Jonas Fonseca、Andrey Artemov、Arnout Engelen、Dominik Winter、Krzysztof Romanowski、Roman Iakovlev、Wiesław Popielarski、Age Mooij、Allan Timothy Leong、Ivan Poliakov、Jason Zaugg、Jilen Zhang、Long Jinwei、Martin Duhem、Michael Stringer、Michael Wizner、Nud Teeraworamongkol、OlegYch、PanAeon、Philippus Baalman、Pierre Dal-Pra、Rafal Wojdyla、Saniya Tech、Tom Walford 以及其他许多贡献想法的人。谢谢!