1. sbt 1.1.x 版本

sbt 1.1.x 版本 

sbt 1.1.6 

錯誤修正 

  • 修正 Unix/Linux 的檔案監看功能。io#150@eatkins 提供
  • 修正刪除時 packageBin 未建立檔案的問題。sbt/sbt#4161 由 @dadarakt 提供
  • 修正 help -v 多行描述的呈現。#4160@ninjalama 提供
  • 修正 —error 等等來設定記錄層級。#4162@holdenk 提供
  • 處理 managedSources 寫入未受管理的來源目錄。#4099@eatkins 提供
  • 修正 EventMonitor 中溢位的處理。io#155@eatkins 提供
  • 復原 UpdateLogging.Full 下的「正在解析...」記錄。lm#240@hodga 提供
  • 修正 -Dconfig.resource=/path/to/configFile 與 Gigahorse 衝突的問題。lm#241@tanishiking 提供
  • 移除已棄用的 ModifiedTime 方法的使用。io#154@dwestheide 提供
  • 修正 Windows 上的測試。io#153@OlegYch 提供

貢獻者 

非常感謝所有協助改善 sbt 和 Zinc 1 的人員,感謝您們的使用、回報錯誤、改進我們的文件、移植建置、移植外掛程式,以及提交和審查提取請求。

根據 sbt、zinc、librarymanagement、util、io、launcher-package 和網站上的 git shortlog -sn --no-merges v1.1.5...v1.1.6,sbt 1.1.6 由 15 位貢獻者共同完成: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、zinc、librarymanagement、util、io、launcher-package 和網站上的 git shortlog -sn --no-merges v1.1.4...v1.1.5,sbt 1.1.5 由 21 位貢獻者共同完成: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@eatkins 提供

使用待命執行 sbt 

在分析時,您會遇到一個棘手的問題,那就是在想要分析應用程式的開頭時,找出程序 ID。

為此,我們新增了 sbt.launcher.standby JVM 旗標。從 sbt 1.1.4 開始,您可以執行

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

這會在執行其他任何動作之前倒數 20 秒。launcher#51@eed3si9n 提供

載入效能改善 

Jason Zaugg 使用火焰圖(如果您還沒用過,請參考剖析 JVM 應用程式文章)發現,在 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 的人員,感謝您們的使用、回報錯誤、改進我們的文件、移植建置、移植外掛程式,以及提交和審查提取請求。

根據 sbt、zinc、librarymanagement、util、io、launcher-package 和網站上執行 git shortlog -sn --no-merges v1.1.2...v1.1.4 的結果,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 格式中的 getDecoderzinc#502@jilen 提供
  • 修復了 Array 周圍的 equal / hashCode 不一致問題。zinc#513@eed3si9n 提供
  • 在 rt 匯出過程中,將 java9-rt-ext-output 加入白名單。lp#211@eatkins 提供
  • 修復了 Java 10 相容性的 JDK 版本偵測問題。lp#219@eed3si9n@2m 提供
  • 修復了 Windows bat 檔案中的引號問題。lp#220@ForNeVeR 提供
  • 修復了 -error 無法抑制啟動記錄的問題。#4036@eed3si9n 提供

改進 

  • 關於記錄的效能最佳化。util#152@retronym 提供
  • 透過快取 Configuration 的 hashCode 來進行效能修復。lm#213@retronym 提供
  • 當命令失敗時,在 sbt 伺服器上傳回錯誤代碼 -33000L#3991@dwijnand 提供
  • 允許在組織和 artifact 中使用萬用字元。#215@dhs3000 提供
  • 更新到最新的 Jsch,以支援更強的金鑰交換演算法。lm#217@ryandbair 提供
  • 修復了編譯器橋接預先載入的問題。lp#222@analytically 提供

內部 

貢獻者 

根據 sbt、zinc、librarymanagement、util、io、launcher-package 和網站上執行 git shortlog -sn --no-merges v1.1.1...v1.1.2 的結果,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 

錯誤修正 

改進 

  • 棄用了 Extracted#append,改用 appendWithSessionappendWithoutSession#3865@dwijnand 提供
  • 新增一個名為 autoStartServer 的新全域 Boolean 設定。請參閱下方。
  • 升級了用於 sbt 交叉建置 ^^ 的 Scala 版本。#3923@dwijnand 提供
  • @xuwei-k 進行的許多文件維護變更。

autoStartServer 設定 

sbt 1.1.1 新增一個名為 autoStartServer 的全域 Boolean 設定,預設設定為 true。當設定為 true 時,sbt shell 會自動啟動 sbt 伺服器。否則,它將不會啟動伺服器,直到發出 startSever 命令。這可用於基於安全原因選擇停用伺服器。

#3922@swaldman 提供

貢獻者 

根據 sbt、zinc、librarymanagement、util、io 和網站上執行 git shortlog -sn --no-merges v1.1.0 ..v1.1.0 的結果,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 提供,修復了 ~ 相關問題 #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 檔案中的 import,因此如果使用者建立反引號定義,任務評估將不會失敗。#3635@panaeon 貢獻。
  • 從警告訊息中移除對 0.14.0 版本的參考。#3693@saniyatech 貢獻。
  • 修正 screpl 拋出「Not a valid key: console-quick」的問題。#3762@xuwei-k 貢獻。
  • 恢復對 Scala 2.13.0-M1 的支援。#461 由 @dwijnand 貢獻。
  • 修正 Unix 類檔案路徑的編碼,使用 file:///#3805@eed3si9n 貢獻。
  • 修正啟動期間的 Log4J2 初始化錯誤。#3814@dwijnand 貢獻。

改進 

  • 根據可選的 project/build.properties 篩選腳本測試。請參閱下方說明。
  • 新增 Project#withId 以變更專案的 id。#3601@dwijnand 貢獻。
  • 新增 reboot dev 命令,它會從 boot 目錄中刪除目前的成品。這在處理 sbt 的開發版本時很有用。#3659@eed3si9n 貢獻。
  • reload 之前新增對 sbt 版本變更的檢查。#1055/#3673@RomanIakovlev 貢獻。
  • 新增一個新的設定 insideCI,表示 sbt 很可能在持續整合環境中執行。#3672@RomanIakovlev 貢獻。
  • nameOption 新增至 Command trait。#3671@miklos-martin 貢獻。
  • 在 IO 中新增 POSIX 權限操作,例如 IO.chmod(..)io#76@eed3si9n 貢獻。
  • 在驅逐警告中使用語義版本控制來處理 sbt 1 模組。lm#188@eed3si9n 貢獻。
  • 在程式碼中使用 kind-projector。#3650@dwijnand 貢獻。
  • 使 Completions 中的 displayOnly 等方法嚴格執行。#3763@xuwei-k 貢獻。

sbt shell 和 build.sbt 的統一斜線語法 

這為 sbt shell 和 build.sbt DSL 新增統一的斜線語法。取代目前的 <project-id>/config:intask::key,新增 <project-id>/<config-ident>/intask/key,其中 <config-ident> 是 Scala 識別符號表示法,用於類似 CompileTest 的組態。(舊的 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@eed3si9n@dwijnand 貢獻

sbt 伺服器 

sbt 伺服器功能已重新設計,使用 Language Server Protocol 3.0 (LSP) 作為傳輸協定,這是 Microsoft 為 Visual Studio Code 建立的協定。

為了探索正在執行的伺服器,sbt 1.1.0 會在相對於組建的 ./project/target/active.json 位置建立一個 port 檔案

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

local: 表示 UNIX 網域 socket。以下是如何使用 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 伺服器新增網路存取權限給 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@eed3si9n 貢獻。

VS Code 擴充功能 

我們為 sbt 伺服器設想的主要使用案例是工具整合,例如編輯器和 IDE。作為概念驗證,我們建立了一個名為 Scala (sbt) 的 Visual Studio Code 擴充功能。

目前此擴充功能可以

使用 project/build.properties 篩選腳本測試 

對於所有存在 project/build.properties 的腳本測試,會讀取 sbt.version 屬性的值。如果其二進制版本與 pluginCrossBuild 中的 sbtBinaryVersion 不同,則會跳過測試並記錄指示此訊息的訊息。

這讓您可以定義追蹤最小支援 sbt 版本的腳本測試,例如 0.13.9 和 1.0.0-RC2。#3564/#3566@jonas 貢獻。

貢獻者 

根據 sbt、zinc、librarymanagement、util、io 和 website 的 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,以及許多貢獻想法的其他人士。謝謝你們!