如果您正在撰寫外掛程式,請使用 1.2.1+,並避免使用 1.2.0。
我們在 1.2.0 中不小心中斷了向前二進位相容性。如果有人使用 sbt 1.2.0 發布 sbt 外掛程式,則無法從 sbt 1.0.x 或 1.1.x 使用。sbt 1.2.1 還原了變更,因此還原了向前相容性。不幸的是,這表示我們將無法再次在 inThisBuild(...)
等中使用變數參數。
請注意,我們最終可能會中斷向前相容性,就像我們在 0.13.5 中針對 AutoPlugin
所做的那樣,但只有在權衡值得時才會這樣做。
第二個回歸修正程式適用於您可能在 1.2.0 中看到的警告牆,如下所示
[warn] The project ProjectRef(uri("file:/Users/xxx/work/akka/"), "akka-actor-typed") references an unknown configuration "multi-jvm" and was guessed to be "Multi-jvm".
[warn] This configuration should be explicitly added to the project.
[warn] The project ProjectRef(uri("file:/Users/xxx/work/akka/"), "akka-actor-typed-tests") references an unknown configuration "multi-jvm" and was guessed to be "Multi-jvm".
[warn] This configuration should be explicitly added to the project.
原始問題是,當組態不是子專案的一部分時,統一斜線語法不會挑選組態名稱。由於此警告無關緊要,我們將在此修補程式版本中移除它們。
外掛程式作者可以開始做的一件事是將自訂組態宣告為隱藏,並將它們加入子專案中,如下所示
import sbt._
import sbt.Keys._
object ParadoxPlugin extends AutoPlugin {
val ParadoxTheme = config("paradox-theme").hide
override def projectConfigurations: Seq[Configuration] = Seq(ParadoxTheme)
....
}
我們也正在研究改進統一斜線語法剖析器,使其更加穩健。
IO.relativize
。io#175 by @eatkins非常感謝所有透過使用 sbt 和 Zinc 1、回報錯誤、改善我們的文件、移植建置、移植外掛程式,以及提交和審閱提取請求來協助改進 sbt 和 Zinc 1 的每個人。
根據 sbt、zinc、librarymanagement、util、io、launcher-package 和網站上的 git shortlog -sn --no-merges v1.2.1...v1.2.0
,sbt 1.2.1 由 4 位貢獻者帶來:Eugene Yokota、Aaron S. Hawley、Ethan Atkins 和 Allan Renucci。謝謝!也特別感謝 Ches Martin 和 Yoshida-san 回報這些問題。
警告:我們在 1.2.0 中發現向前相容性中斷,因此我們建議大家升級至 sbt 1.2.1 或更高版本。
sbt 1.2 的主要功能是跨 JDK 分叉、複合專案和實驗性輕量型用戶端。但是,自 sbt 1.1 以來,我們已經累積了許多其他錯誤修正和增強功能,長達六個月。
SbtPlugin
是一個宣告 sbt 外掛程式專案的外掛程式。這會自動引入指令碼測試,並設定 sbtPlugin := true
。
lazy val root = (project in file("."))
.enablePlugins(SbtPlugin)
相容性注意事項:ScriptedPlugin
不再是觸發的外掛程式。
對於分叉的 run
和 test
,java++
現在可以切換 Java Home。
sbt:helloworld> run
[info] Running (fork) Hello
[info] 1.8.0_171
sbt:helloworld> java++ 10!
[info] Reapplying settings...
sbt:helloworld> run
[info] Running (fork) Hello
[info] 10.0.1
sbt 將嘗試在 discoveredJavaHomes
設定中偵測 Java home,支援 shyiko/jabba。這可以透過 Global / javaHomes
擴充
Global / javaHomes += "6" -> file("/something/java-6")
此功能旨在在較舊的 JVM 中測試您的函式庫,以檢查相容性。
#4139 by @2m, @cunei, and @eed3si9n
在 2015 年,James Roper 貢獻了 scalaVersion 篩選的聚合到 sbt-doge。Rui Gonçalves ( @ruippeixotog) 在 #3698/#3995 中將此功能帶回 sbt 1.2!
這會將 switch 命令 ++
擴充為採用選用的 <command>
> ++2.12.7 compile
這只會聚合 ++2.12.7
有效的子專案,這在您擁有某些子專案僅為 2.11 等的建置時非常有用。
sbt 1.2.0 引入了「複合專案」特性,允許外掛程式作者產生子專案,例如用於跨版本建置。
trait CompositeProject {
def componentProjects: Seq[Project]
}
這是由 @BennyHill 作為 #4056 貢獻的。
實驗性。作為 CompositeProject
的參考實作,我實作了由 sbt-projectmatrix 外掛程式引入的稱為 projectMatrix
的新 DSL。
lazy val core = (projectMatrix in file("core"))
.scalaVersions("2.12.7", "2.11.12")
.settings(
name := "core"
)
.jvmPlatform()
lazy val app = (projectMatrix in file("app"))
.dependsOn(core)
.scalaVersions("2.12.7")
.settings(
name := "app"
)
.jvmPlatform()
外掛程式的目的是支援使用子專案表達的跨版本建置(Scala 版本、平台等)的通用概念。在上述範例中,projectMarix
將產生三個子專案:coreJVM2_12
、coreJVM2_11
和 appJVM2_12
。
sbt 1.2.0 在 VersionNumber()
資料類型上引入了語義版本選取器,支援基本比對、比較(<=
、<
、>=
、>
)、組合(>1.0.0 <2.0.0
、||
)、範圍(A.B.C - D.E.F
)和萬用字元(2.12.x
)。
scala> import sbt.librarymanagement.{ VersionNumber, SemanticSelector }
import sbt.librarymanagement.{VersionNumber, SemanticSelector}
scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector(">=2.12"))
res1: Boolean = true
scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("<2.12"))
res2: Boolean = false
scala> VersionNumber("2.13.0-M4").matchesSemVer(SemanticSelector("2.13"))
res3: Boolean = false
scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("2.12.1 - 2.12.7"))
res4: Boolean = true
scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("2.12.x"))
res5: Boolean = true
scala> VersionNumber("2.12.5").matchesSemVer(SemanticSelector("2.11.x || 2.12.x"))
res6: Boolean = true
注意:目前這對函式庫管理沒有影響。
這是由 Rikito Taniguchi (@tanishiking) 作為 lm#239 貢獻的。
IntelliJ 要求安全地將外掛程式注入建置。sbt 1.2.0 新增了 -addPluginSbtFile
命令來執行此操作。
$ cat /tmp/extra.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.7")
$ sbt -addPluginSbtFile=/tmp/extra.sbt
...
sbt:helloworld> plugins
In file:/xxxx/hellotest/
...
sbtassembly.AssemblyPlugin: enabled in root
實驗性。sbt 伺服器現在可以透過外掛程式擴充。
Global / serverHandlers += ServerHandler({ callback =>
import callback._
import sjsonnew.BasicJsonProtocol._
import sbt.internal.protocol.JsonRpcRequestMessage
ServerIntent(
{
case r: JsonRpcRequestMessage if r.method == "lunar/helo" =>
jsonRpcNotify("lunar/oleh", "")
()
},
PartialFunction.empty
)
此功能仍為實驗性,且 API 可能會在未來變更。
實驗性功能。sbt 1.2.0 新增了一個名為 -client
的模式。當 sbt 以 -client 命令啟動時,它不再載入建置,而是嘗試透過 JSON-RPC 連接到 sbt 伺服器的實例。當伺服器未執行(找不到 portfile)時,它將在新的 JVM 中完全 fork 一個新的 sbt 實例。
這讓您可以從終端機殼層或編輯器中調用 sbt
。
$ time sbt -client clean
[info] entering *experimental* thin client - BEEP WHIRR
[info] server was not detected. starting an instance
[info] waiting for the server...
[info] waiting for the server...
[info] waiting for the server...
[info] waiting for the server...
[info] server found
> clean
[success] completed
sbt -client clean 9.23s user 2.33s system 22% cpu 50.558 total
# server stays
$ ps | rg java
21860 ttys015 1:22.43 java -Xms2048M -Xmx2048M -Xss2M -jar /usr/local/Cellar/sbt/1.1.6/libexec/bin/sbt-launch.jar
22014 ttys015 0:00.00 rg java
$ time sbt -client clean
[info] entering *experimental* thin client - BEEP WHIRR
> clean
[info] Updating ...
[info] Done updating.
[success] completed
sbt -client clean 3.39s user 1.75s system 104% cpu 4.898 total
要結束伺服器,請調用 sbt -client shutdown
。 #4227 由 @eed3si9n 提供
此外,還有其他使用 Rust 實作的輕量級客戶端 cb372/sbt-client 和 dwijnand/sbtl。
-
、--
和 ---
。請改用 onFailure
、sbtClearOnFailure
和 resumeFromFailure
。 #4124++
沒有影響任何子專案時,會使其失敗 #4269 由 @eed3si9n 提供Command.process(String, State): State
。 #4023 由 @dwijnand 提供active.json
的問題。 #4194 由 @veera83372 提供CreateFile()
失敗」)。 io#134 由 @cunei 提供.value
的 linter。 #4090 由 @eed3si9n 提供removeEscapeSequences
中的 StringIndexOutOfBoundsException
。 util#139 由 @dwijnand 提供JavaNetAuthenticator
中的空值檢查。 lm#177 由 @eed3si9n 提供classOf[A]
的問題。 zinc#510 由 @natansil 提供skip
鍵的文件。 #3926 由 @dkim 提供Global / cancelable
設定為 true
時,fork 測試中的 Ctrl-C 處理。 #4226 由 @driquelme 提供run
的堆疊追蹤。 #4232 由 @eed3si9n 提供sbt new
使用的 Giter8 版本提升至 0.11.0,修正各種問題 #4263 由 @eed3si9n 提供ThisBuild / evictionWarningOptions
設定。 lm211 和 #3947 由 @exoego 提供inThisBuild(...)
、inConfig(C)(...)
、inTask(t)(...)
、inScope(scope)(...)
中使用可變參數。 #4106 由 @dwijnand 提供run
的 fgRun
和 fgRunMain
任務。 #4216 由 @agaro1121 提供test.script
和 pending.script
作為指令碼檔案名稱。 #4220 由 @regadas 提供inspect
命令中的別名。 #4221 由 @gpoirier 提供~
的監看訊息中。 #2038 / #3813 由 @dwijnand 提供PathFinder#get
變更為 get()
。 io#104 由 @dwijnand 提供inConfigurationsByKeys
和 inConfigurationsByRefs
新增工廠方法。 #3994lastGrep
、loadFailed
等命令來取代烤肉串式命令。 #4080 由 @naferx 提供、#4159 由 @Asamsig 提供,以及 #4169 由 @tiqwab 提供about
命令會排序和縮排外掛程式清單。 #4187 由 @mcanlas 提供-Dsbt.offline
設定 offline
設定。 #4198 由 @eed3si9n 提供IO.directoryURI
中建立無用的 URI
副本。 io#132 由 @jrudolph 提供initStringCodecs
中進行 reflect universe 初始化。 util#153 由 @jrudolph 提供Parsers.validID
的速度。 #3952 由 @jrudolph 提供for
理解來優化範圍委派。 #4003 由 @jrudolph 和 @eed3si9n 提供val
而非 var
。 #4253 由 @xuwei-k 提供再次感謝所有協助改進 sbt 和 Zinc 1 的人員。
sbt 1.2.0 由 60 位貢獻者共同完成。Dale Wijnand、Eugene Yokota、Kenji Yoshida (xuwei-k)、Yasuhiro Tatsuno (exoego)、Łukasz Wawrzyk、Jorge Vicente Cantero (jvican)、Alistair Johnson、Antonio Cunei、Jason Zaugg、Rikito Taniguchi (tanishiking)、Seiya Mizuno、Tim Harper、Aloisia Davì (alodavi)、Arnout Engelen、Ethan Atkins、Johannes Rudolph、Krzysztof Romanowski、Allan Renucci、Brian P. Holt、Filipe Regadas、Hiroshi Ito、Martijn Hoekstra、OlegYch、Seth Tisue、natans、Aaron S. Hawley、Alex Khvatov、Alexander Samsig、Andreas Jim-Hartmann、Andrei Pozolotin、Andrey Kaygorodov、Anthony Garo、Christopher Hunt、Colin Dean、Daniel Riquelme、Deokhwan Kim、Gerard Maas、Guillaume Poirier、Heikki Vesalainen、Jason Pickens、Jonas Fonseca、Julien Jerphanion、Justin Pihony、Kazufumi Nishida、Kyle Goodale、Maksym Fedorov、Mark Canlas、Martynas Mickevičius、Michael Pollmeier、Mike Skells、Nafer Sanabria、Naohisa Murakami (tiqwab)、PanAeon、Peter Neyens、Rui Gonçalves、Sean Sullivan、Stephen Nancekivell、Veera Venky、blakkan、ortigali。 謝謝你們!