如果你正在编写插件,请使用 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、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 和 @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
的参考实现,我实现了一个名为 projectMatrix
的新 DSL,由 sbt-projectmatrix 插件引入。
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 服务器的实例。当服务器未运行(未找到端口文件)时,它将在新的 JVM 中完全分叉 sbt 的新实例。
这使你能够从终端 shell 或编辑器中调用 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 by @eed3si9n
此外,还有一些使用 Rust 实现的替代瘦客户端 cb372/sbt-client 和 dwijnand/sbtl。
-
、--
和---
。请改用onFailure
、sbtClearOnFailure
和resumeFromFailure
。 #4124++
没有影响任何子项目时,使其失败 #4269 by @eed3si9nCommand.process(String, State): State
。 #4023 by @dwijnandactive.json
没有被删除的问题。 #4194 by @veera83372CreateFile()
失败”的文件权限错误。 io#134 by @cunei.value
的代码检查器。 #4090 by @eed3si9nremoveEscapeSequences
中的StringIndexOutOfBoundsException
。 util#139 by @dwijnandJavaNetAuthenticator
,并添加了空值检查。 lm#177 by @eed3si9nclassOf[A]
的问题。 zinc#510 by @natansilskip
键的文档。 #3926 by @dkimGlobal / cancelable
设置为true
时,分叉测试中Ctrl-C的处理问题。 #4226 by @driquelmerun
的堆栈跟踪。 #4232 by @eed3si9nsbt new
使用的Giter8版本升级到0.11.0,修复了各种问题 #4263 by @eed3si9nThisBuild / evictionWarningOptions
进行配置。 lm211 和 #3947 by @exoegoinThisBuild(...)
、inConfig(C)(...)
、inTask(t)(...)
、inScope(scope)(...)
中使用可变参数。 #4106 by @dwijnandfgRun
和fgRunMain
任务,其行为类似于sbt 0.13的run
。 #4216 by @agaro1121test.script
和pending.script
作为脚本文件名。 #4220 by @regadasinspect
命令中的别名。 #4221 by @gpoirier~
的监控消息中。 #2038 / #3813 by @dwijnandPathFinder#get
更改为get()
。 io#104 by @dwijnandinConfigurationsByKeys
和inConfigurationsByRefs
。 #3994lastGrep
、loadFailed
等命令来替换连字符分隔的命令。 #4080 by @naferx、#4159 by @Asamsig 和 #4169 by @tiqwababout
命令对插件列表进行排序和缩进。 #4187 by @mcanlas-Dsbt.offline
设置offline
设置。 #4198 by @eed3si9nIO.directoryURI
中创建无用的URI
副本。 io#132 by @jrudolphinitStringCodecs
中初始化反射宇宙。 util#153 by @jrudolphParsers.validID
的速度。 #3952 by @jrudolphfor
推导来优化范围委托。 #4003 by @jrudolph 和 @eed3si9nval
代替var
。 #4253 by @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。感谢你们!