sbt new
不回显字符的问题 #5954 by @eatkinsdependencyBrowseTree
等问题 #5967 by @naderghanbariclasses
目录导致的“classes does not exist”错误问题 zinc#934 by @eed3si9nClassfileManager
输出中添加日志记录 #5990 by @smarterCtrl-C
和 Ctrl-D
处理问题 #5947/#5975 by @eatkins-Dsbt.color=true
在某些情况下不起作用的问题 #5960 by @eatkinsproject/target
是符号链接时出现的 FileAlreadyExistsException
问题 #5972 by @eatkinsbuild.sbt
和 --batch
时挂起的问题 #5945 by @eatkins.inputrc
文件支持问题 #5973 by @xuwei-kMatchError
问题 #5948 by @adpi2shellPrompt
和 release*
键在构建 linting 时发出警告的问题 #5983/#5991 by @xirc and @eed3si9n<task>.value
宏导致的“a pure expression does nothing”警告问题 #5981 by @eed3si9nplugins
命令的输出 #5932 by @aaabramovsbt 1.4.0 的主要功能包括
ThisBuild / versionScheme
消除驱逐警告的猜测sbt 1.4.0 添加了构建服务器协议 (BSP) 支持,由 Scala Center 贡献。主要实现由 Adrien Piquerez (@adpi2) 完成,基于 @eed3si9n 的原型。
当 sbt 1.4.0 启动时,它将创建一个名为 .bsp/sbt.json
的文件,其中包含关于如何运行 sbt -bsp
的机器可读指令,sbt -bsp
是一个使用标准输入和输出与 sbt 服务器通信的命令行程序,使用构建服务器协议。
.bsp
、.metals
、.bloop
目录sbt -Dsbt.semanticdb=true
。等待它显示“sbt server started”compile
以生成 SemanticDB 文件sbt 1.4.0 添加了一个官方原生精简客户端,称为 sbtn
,它支持所有任务。如果您使用的是官方 sbt 启动器 1.4.0 而不是仿冒品,则可以使用 --client
选项来运行原生精简客户端
$ sbt --client compile
$ sbt --client shutdown
原生精简客户端将 sbt(服务器)作为守护进程运行,这将避免从第二次调用开始的 JVM 启动和加载时间。如果您想从系统 shell(如 Zsh 和 Fish)中使用 sbt,这可能是一个选择。
请记住在完成后调用 sbt --client shutdown
!如果您想通过环境变量启用此功能,可以将 SBT_NATIVE_CLIENT
设置为 true
。sbtn
二进制文件也可以从 https://github.com/sbt/sbtn-dist/releases/tag/v1.4.0 获取
sbt 1.4.0 添加了一个名为 ThisBuild / versionScheme
的新设置,用于跟踪构建的版本方案
ThisBuild / versionScheme := Some("early-semver")
支持的值为 "early-semver"
、"pvp"
和 "semver-spec"
。sbt 将此信息作为属性包含到 pom.xml
和 ivy.xml
中。此外,sbt 1.4.0 将使用此信息来消除当此信息可用时,驱逐警告的猜测。 #5724 by @eed3si9n
sbt 1.4.0 / Zinc 1.4.0 虚拟化了增量编译期间跟踪的文件路径。这带来的好处是,增量编译的状态可以在 *不同* 机器之间共享,只要事先枚举了 ThisBuild / rootPaths
。
为了演示这一点,我们还在 sbt 中添加了 *实验性* 的 缓存编译 功能。您只需要以下设置
ThisBuild / pushRemoteCacheTo := Some(MavenCache("local-cache", file("/tmp/remote-cache")))
然后从机器 1 调用 pushRemoteCache
。这将把 *.class
和 Zinc 分析工件发布到该位置。接下来,从机器 2 调用 pullRemoteCache
。
在启动时,sbt 1.4.0 检查未使用的设置/任务。由于大多数设置是中间设置/任务,因此它们默认情况下包含在 linting 中。值得注意的例外是专门由命令使用的设置。要选择退出,您可以将其附加到 Global / excludeLintKeys
或将等级设置为不可见。
sbt 1.4.0 添加了对条件任务(或选择性任务)的支持,这是一种新的任务类型,当 Def.task { ... }
包含一个 if
表达式时会自动创建。
bar := {
if (number.value < 0) negAction.value
else if (number.value == 0) zeroAction.value
else posAction.value
}
与常规(应用)任务组合不同,条件任务会延迟 then-clause 和 else-clause 的评估,就像 if
表达式自然预期的那样。这可以通过 Def.taskDyn { ... }
实现,但与动态任务不同,条件任务可与 inspect
命令一起使用。有关详细信息,请参阅 sbt 的选择性函子。 #5558 由 @eed3si9n 贡献。
sbt 1.4.0 添加了实验性的增量构建流水线功能。要为构建启用构建流水线
ThisBuild / usePipelining := true
要选择退出为部分子项目创建早期输出
exportPipelining := false
sbt 1.4.0 将 Johannes Rudolph 的 sbt-dependency-graph 插件整合到代码库中。由于它为每个子项目注入许多任务,因此该插件被拆分为两个部分:- 默认情况下启用的 MiniDependencyTreePlugin
,它将 dependencyTree
任务引入 Compile
和 Test
配置- 全功能的 DependencyTreePlugin
,可以通过将以下内容添加到 project/plugins.sbt
来启用
addDependencyTreePlugin
ThisBuild / useLog4J := true
来使用 Log4j。 #5731 由 @eatkins 贡献。val
#2232/#5448 由 @eed3si9n 贡献。.withAllowInsecureProtocol(true)
显式选择加入 #5593 由 @eed3si9n 贡献。~
返回到 shell,而不是关闭 sbt #5804 由 @eatkins 贡献。/
运行 sbt 且未设置 -Dsbt.rootdir=true
,则会抛出错误 #5112 由 @eed3si9n 贡献。StateTransform
以接受 State => State
#5260 由 @eatkins 贡献。TERM
设置为“dumb”时,禁用超级外壳 #5278 由 @hvesalai 贡献。sbt.ForkMain
的库端点 #5315 由 @olafurpg 贡献。doc
失效 #5362 由 @eatkins 贡献。toTaskable
方法注入 Initialize[A]
#5439 由 @dwijnand 贡献。semanticdbVersion
更新为 4.3.7 #5481 由 @anilkumarmyla 贡献。Tracked.outputChangedW
和 Tracked.inputChangedW
,它们需要 JsonWriter[A]
的类型类证据,而不是 JsonFormat[A]
#5513 由 @bjaglin 贡献。State
,以便于 sbt 服务器通信 #5207 由 @eed3si9n 贡献。testGrouping
的加权标签的支持 #5527 由 @frosforever 贡献。null
时出现的 NullPointerError #5526 由 @3rwww1 贡献。Def.promise
,用于长时间运行的任务与其他任务进行通信 #5552 由 @eed3si9n 贡献。-Dsbt.repository.publish.attempts
设置为 3) lm#340 由 @izharahmd 贡献。sbt 1.4.0 由 34 位贡献者提供支持。Ethan Atkins、Eugene Yokota (eed3si9n)、Johannes Rudolph、Dale Wijnand、Adrien Piquerez、Jason Zaugg、Arnout Engelen、Josh Soref、Guillaume Martres、Maksim Ochenashko、Anil Kumar Myla、Brice Jaglin、Claudio Bley、João Ferreira、Steve Waldman、frosforever、Alex Zolotko、Heikki Vesalainen、Ismael Juma、Stephane Landelle、Jannik Theiß、izharahmd、lloydmeta、Alexandre Archambault、Eric Peters、Erwan Queffelec、Kenji Yoshida (xuwei-k)、Martin Duhem、Olafur Pall Geirsson、Renato Cavalcanti、Vincent PERICART、nigredo-tori。谢谢!