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。谢谢!