这是 sbt 1.0.x 系列的修补版本。
ArrayIndexOutOfBoundsException 时出现的错误。 ivy#27 由 @xuwei-k 提供-jvm-debug 问题。 launcher-package197 由 @mkurz 提供run 输出调试级别日志的问题。 #3655/#3717 由 @cunei 提供testQuick 的性能回归问题。 #3680/#3720 由 @OlegYch 提供templateStats() 不安全线程的问题。 #3743 由 @cunei 提供http: 和 https: 注册 Ivy 协议,以更便于插件使用。 lm183 由 @tpunder 提供expr 修复了与 bc 相关的脚本问题。 launcher-package#199 由 @thatfulvioguy 提供非常感谢所有通过使用 sbt 和 Zinc 1、报告错误、改进我们的文档、移植构建、移植插件以及提交和审查拉取请求来帮助改进 sbt 和 Zinc 1 的人。
根据 sbt、zinc、librarymanagement、util、io 和网站上的 git shortlog -sn --no-merges v1.0.3..v1.0.4,此版本由 17 位贡献者完成:Eugene Yokota、Kenji Yoshida (xuwei-k)、Jorge Vicente Cantero (jvican)、Dale Wijnand、Leonard Ehrenfried、Antonio Cunei、Brett Randall、Guillaume Martres、Arnout Engelen、Fulvio Valente、Jens Grassel、Matthias Kurz、OlegYch、Philippus Baalman、Sam Halliday、Tim Underwood、Tom Most。感谢您!
这是 sbt 1.0.x 系列的修补版本。
~ 在循环中重新编译的问题(当存在源代码生成器或 sbt-buildinfo 时)。 #3501/#3634 由 @dwijnand 提供null 的 getGenericParameterTypes 提供了变通方案。 zinc#446 由 @jvican 提供/ 问题。 lm#170 由 @laughedelic 提供sbt.watch.mode 系统属性,允许切换回旧的轮询行为以进行监视。有关更多详细信息,请参见下文。sbt 1.0.0 引入了一种新的机制,用于监视基于 Java 1.7 中的 NIO WatchService 的源代码更改。在某些平台(即 macOS)上,这导致在拾取更改之前出现长时间延迟。计划在 sbt 1.1.0 (#3527) 中为这些平台提供一个替代的 WatchService,在此期间,已添加了一个选项来选择使用哪种监视服务。
已添加新的 sbt.watch.mode JVM 标志,并支持以下值
polling:(macOS 的默认值)轮询文件系统以查找更改(sbt 0.13 中使用的机制)。nio:(其他平台的默认值)使用基于 NIO 的 WatchService。如果您在非 macOS 机器上遇到长时间延迟,请尝试将 -Dsbt.watch.mode=polling 添加到您的 sbt 选项中。
#3597 由 @stringbean 提供
非常感谢所有通过使用 sbt 和 Zinc 1、报告错误、改进我们的文档、移植构建、移植插件以及提交和审查拉取请求来帮助改进 sbt 和 Zinc 1 的人。
此版本由 15 位贡献者完成,根据 sbt、zinc、librarymanagement、util、io 和网站上的 git shortlog -sn --no-merges v1.0.2..v1.0.3:Eugene Yokota、Dale Wijnand、Michael Stringer、Jorge Vicente Cantero (jvican)、Alexey Alekhin、Antonio Cunei、Andrey Artemov、Jeffrey Olchovy、Kenji Yoshida (xuwei-k)、Dominik Winter、Long Jinwei、Arnout Engelen、Justin Kaeser、Leonard Ehrenfried、Sakib Hadžiavdić。感谢您!
这是 sbt 1.0.x 系列的修补版本。
deliver 任务,并添加了 makeIvyXml 作为更合理的命名任务。 #3487 由 @cunei 提供OkUrlFactory 使用,并修复了连接泄漏问题。 lm#164 由 @dpratt 提供run 和 bgRun 未拾取对类路径中目录的更改的问题。 #3517 由 @dwijnand 提供++,使其不再更改 crossScalaVersion 的值。 #3495/#3526 由 @dwijnand 贡献。consoleProject。 zinc#386 由 @dwijnand 贡献。sbt.gigahorse 来启用/禁用内部使用 Gigahorse 来解决 JavaNetAuthenticator 在与 repositories 覆盖一起使用时出现的 NPE 问题。 lm#167 由 @cunei 贡献。sbt.server.autostart 来启用/禁用 sbt 服务器与 sbt shell 自动启动。 这也添加了新的 startServer 命令来手动启动服务器。 由 @eed3si9n 贡献。非常感谢所有帮助改进 sbt 和 Zinc 1 的人,包括使用它们、报告 bug、改进文档、移植插件以及提交和审查 pull 请求。
本版本由 19 位贡献者完成,根据 git shortlog -sn --no-merges v1.0.1..v1.0.2 在 sbt、zinc、librarymanagement 和网站上的统计数据:Dale Wijnand、Eugene Yokota、Kenji Yoshida (xuwei-k)、Antonio Cunei、David Pratt、Karol Cz (kczulko)、Amanj Sherwany、Emanuele Blanco、Eric Peters、Guillaume Bort、James Roper、Joost de Vries、Marko Elezovic、Martynas Mickevičius、Michael Stringer、Răzvan Flavius Panda、Peter Vlugter、Philippus Baalman 和 Wiesław Popielarski。 感谢大家!
这是 sbt 1.0.x 系列的修补版本。
+ 命令的命令支持。 sbt 1.0 中添加的 + 会遍历子项目,尊重 crossScalaVersions;但是,它不再接受命令作为参数。 这将恢复对它的支持。 #3446 由 @jroper 贡献。addSbtPlugin 在跨构建期间使用 sbt 的错误版本。 #3442 由 @dwijnand 贡献。run in Compile 任务不包含 Runtime 配置的问题,方法是根据 bgRun 重新实现 run。 #3477 由 @eed3si9n 贡献。actual 作为 inspect 的潜在选项。 #3335 由 @Duhemm 贡献。NullPointerException 问题。 util#121 由 @eed3si9n 贡献。监视源功能从 sbt 0.13 到 sbt 1.0 使用 NIO 经历了重大变化;但是,它没有明确的迁移路径,因此我们在 sbt 1.0.1 中进行了纠正。
首先,sbt.WatchSource 是 sbt.internal.io.Source 的新别名。 希望这很容易记住,因为键名为 watchSources。 接下来,在 sbt.WatchSource 的伴随对象中添加了 def apply(base: File) 和 def apply(base: File, includeFilter: FileFilter, excludeFilter: FileFilter) 构造函数。
为了向后兼容,sbt 1.0.1 添加了 += 支持(Append 实例)从 File 到 Seq[WatchSource]。
因此,如果您要监视一个目录
watchSources += WatchSource(sourceDirectory.value)
如果您有一个文件列表
watchSources ++= (sourceDirectory.value ** "*.scala").get
#3438 由 @Duhemm 贡献;#3478 和 io#74 由 @eed3si9n 贡献。
另请参阅 从 sbt 0.13.x 迁移。
.copy(foo = xxx) 迁移到 withFoo(xxx)。 例如,UpdateConfiguration、RetrieveConfiguration、PublishConfiguration 被重构为使用构建器模式。config("xyz") 必须直接分配给一个 *大写* 的 val,例如 val Xyz = config("xyz")。 这会将左侧标识符捕获到配置中,以便我们稍后从 shell 中使用它。publishTo 和 otherResolvers 从 SettingKeys 更改为 TaskKeys。 #2059/#2662 由 @dwijnand 贡献。Path.relativizeFile(baseFile, file) 重命名为 IO.relativizeFile(baseFile, file)。PathFinder 的 .*** 方法重命名为 .allPaths 方法。PathFinder.x_!(mapper) 已移至 PathFinder 上的 def pair。sbt.Path 上的许多方法(例如 relativeTo 和 rebase 以及 flat)现在不再位于默认命名空间中,因为它们被混合到 sbt 包对象中。 使用 sbt.io.Path 再次访问它们。Global 作为范围组件重命名为 Zero 以区分 GlobalScope。 @eed3si9nString 来引用配置的地方使用 ConfigRef,例如 update.value.configuration(...)。 传入 Configuration,它会隐式转换为 ConfigRef。sourceArtifactTypes 和 docArtifactTypes 从 Set[String] 更改为 Seq[String] 设置。--<command> 重命名为 early(<command>)。publishLocal 而不是 publish-local)。-error、-warn、-info、-debug 添加为 "early(error)" 等的简写。sbt.Process 和 sbt.ProcessExtra 已删除。 使用 scala.sys.process 代替。incOptions.value.withNameHashing(...) 选项已删除,因为名称哈希始终处于打开状态。TestResult.Value 现在称为 TestResult。%%。删除了弃用的功能:
Build 特性,它在 sbt 0.13.12 中被弃用,现已删除。 请 迁移到 build.sbt。 自动插件和 Build 特性无法很好地协同工作,其功能现在在很大程度上被多项目 build.sbt 涵盖。Project(...) 构造函数被限制为两个参数。 这是因为 settings 参数无法与自动插件很好地协同工作。 使用 project 代替。<<=、<+=、<++= 已删除。 请 迁移到 :=、+= 和 ++=。 这些运算符一直是许多用户混淆的来源,并且在 0.13 文档中早已删除,并且自 sbt 0.13.13 以来正式弃用。sbt.Plugin 特性已删除。 请迁移到 AutoPlugin。 自动插件更容易配置,并且能够更好地协同工作。Project 中删除 settingsSets 方法(以及 add/setSbtFiles)。InputTask apply 方法和 inputTask DSL 方法。 使用 Def.inputTask 和 Def.spaceDelimited().parsed。ProjectReference 隐式提升。 使用 RootProject(<uri>)、RootProject(<file>) 或 LocalProject(<string>)。seq(..) DSL 方法。 使用 Seq 或在不包装的情况下传入设置。File/Seq[File] 设置增强。 使用 .value 和 Def.setting。SubProcess apply 重载。 使用 SubProcess(ForkOptions(runJVMOptions = ..))。toError(opt: Option[String]): Unit(等效于 opt foreach sys.error);如果用于包装 ScalaRun#run,则替换为 scalaRun.run(...).failed foreach (sys error _.getMessage)console 任务。 zinc#295 由 @dwijnand 贡献。update 任务的任务缓存问题。 #3233 由 @eed3si9n 贡献。build.sbt 的静态验证。 如下所示scalas 的脚本模式下,启动日志级别降至 -error。 #840 由 @eed3si9n 贡献。++ 的行为已更改,因此它仅更新支持该 Scala 版本的项目的 Scala 版本,但 Scala 版本可以后缀 ! 以强制它更改所有项目。 添加了一个 -v 参数,它会打印有关哪些项目的设置正在更改以及它们的跨 Scala 版本的详细信息。 #2613 由 @jroper 贡献。ivyLoggingLevel 将降至 UpdateLogging.Quiet。 @eed3si9nbuild.sbt(匹配 *.sbt)文件名称的记录。 #1911 由 @valydia 贡献。aggregate 的能力。 由 @xuwei-k 贡献。asciiGraphWidth,用于控制 inspect tree 等命令打印的 ASCII 图表的最大宽度。 默认值对应于先前硬编码的 40 个字符值。 由 @RomanIakovlev 贡献。^ 和 ^^ 命令,用于插件交叉构建。见下文。autoImport 。 #3115 by @jvicanInteractionService 以保持与 sbt 0.13 的兼容性。 #3182 by @eed3si9nWatchService,它抽象了 PollingWatchService 和 Java NIO。 io#47 by @Duhemm on behalf of The Scala Center.IO.copyFile 和 IO.copyDirectory 的变体,它们接受 sbt.io.CopyOptions()。有关详细信息,请参见下文。Path.directory 和 Path.contentOf 来自 sbt-native-packager io#38 by @muuki88Grzegorz Kossakowski(由 Lightbend 委托)在 Zinc 1.0 中引入的一个重大改进是基于类的名称哈希,这将加速大型项目中 Scala 的增量编译。
Zinc 1.0 的名称哈希在类级别跟踪您的代码依赖关系,而不是在源文件级别。GitHub 问题 sbt/sbt#1104 列出了一些在某些项目中向现有类添加方法的比较
ScalaTest   AndHaveWord class:          Before 49s, After 4s (12x)
Specs2      OptionResultMatcher class:  Before 48s, After 1s (48x)
scala/scala Platform class:             Before 59s, After 15s (3.9x)
scala/scala MatchCodeGen class:         Before 48s, After 17s (2.8x)
这取决于一些因素,例如您的类是如何组织的,但您可以看到 3 倍到 40 倍的改进。速度提升的原因是,通过将类从源文件分离,它编译的源文件比以前更少。在向 scala/scala 的 Platform 类添加方法的示例中,sbt 0.13 的名称哈希以前编译了 72 个源文件,但新的 Zinc 只编译了 6 个源文件。
xsbti.compile 包下的 Java 类(如 IncOptions)隐藏了构造函数。使用工厂方法 xsbti.compile.Foo.of(...)。ivyScala: IvyScala 键重命名为 scalaModuleInfo: ScalaModuleInfo。xsbti.Reporter#log(...) 将 xsbti.Problem 作为参数。调用 log(problem.position, problem.message, problem.severity) 以委托给旧的 log(...)。xsbi.Maybe、xsbti.F0 和 sxbti.F1 已更改为相应的 Java 8 类 java.util.Optional、java.util.Supplier 和 java.util.Function。sbt 1.0 包含服务器功能,允许 IDE 和其他工具查询构建以获取设置,并通过 JSON API 调用命令。类似于 sbt 0.13 中交互式 shell 使用 shell 命令的方式,“服务器”也只是一个 shell 命令,它同时监听人类输入和网络输入。作为用户,服务器应该对您造成的影响最小。
在 2016 年 3 月,我们 重启 了“服务器”功能,使其尽可能小。我们与 JetBrains 的 @jastice(他负责 IntelliJ 的 sbt 接口)合作,缩小了功能列表。sbt 1.0 不会包含我们最初想要的所有功能,但从长远来看,我们希望通过这个系统看到 IDE 和 sbt 生态系统之间更好的集成。例如,IDE 将能够发出编译任务并以 JSON 事件的形式检索编译器警告
{"type":"xsbti.Problem","message":{"category":"","severity":"Warn","message":"a pure expression does nothing in statement position; you may be omitting necessary parentheses","position":{"line":2,"lineContent":"  1","offset":29,"pointer":2,"pointerSpace":"  ","sourcePath":"/tmp/hello/Hello.scala","sourceFile":"file:/tmp/hello/Hello.scala"}},"level":"warn"}
另一个相关的添加功能是 bgRun 任务,例如,它允许在您对其运行测试时,在后台运行服务器进程。
sbt 1.0 禁止在任务的 if 表达式和匿名函数主体内部调用 .value,可以使用 @sbtUnchecked 注解来覆盖检查。
静态验证还会捕获您在任务主体中忘记调用 .value 的情况。
sbt 1.0 改进了驱逐警告提示。
以前
[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn]  * com.google.code.findbugs:jsr305:2.0.1 -> 3.0.0
[warn] Run 'evicted' to see detailed eviction warnings
之后
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn]
[warn]      * com.typesafe.akka:akka-actor_2.12:2.5.0 is selected over 2.4.17
[warn]          +- de.heikoseeberger:akka-log4j_2.12:1.4.0            (depends on 2.5.0)
[warn]          +- com.typesafe.akka:akka-parsing_2.12:10.0.6         (depends on 2.4.17)
[warn]          +- com.typesafe.akka:akka-stream_2.12:2.4.17 ()       (depends on 2.4.17)
[warn]
[warn] Run 'evicted' to see detailed eviction warnings
@jrudolph 的 sbt-cross-building 是插件作者的插件。它添加了交叉命令 ^ 和 sbtVersion 切换命令 ^^,类似于 + 和 ++,但用于在主要版本之间切换多个 sbt 版本。sbt 0.13.16 将这些命令合并到 sbt 中,因为随着我们迁移插件到 sbt 1.0,它提供的功能非常有用。
要从 shell 切换 sbtVersion in pluginCrossBuild,请使用
^^ 1.0.0-M5
您的插件现在将使用 sbt 1.0.0-M5(及其 Scala 版本 2.12.2)构建。
如果您需要对特定 sbt 版本进行更改,您现在可以将它们包含到 src/main/scala-sbt-0.13 和 src/main/scala-sbt-1.0.0-M5 中,其中二进制 sbt 版本号用作后缀。
要在多个 sbt 版本上运行命令,请设置
crossSbtVersions := Vector("0.13.15", "1.0.0-M5")
然后,运行
^ compile
#3133 by @eed3si9n (从 0.13.16-M1 向前移植)
sbt IO 1.0 添加了 IO.copyFile 和 IO.copyDirectory 的变体,它们接受 sbt.io.CopyOptions()。CopyOptions() 是类似于构建器模式的伪 case class 的一个示例。
import sbt.io.{ IO, CopyOptions }
IO.copyDirectory(source, target)
// The above is same as the following
IO.copyDirectory(source, target, CopyOptions()
  .withOverwrite(false)
  .withPreserveLastModified(true)
  .withPreserveExecutable(true))
sbt 1.0 添加了库管理 API,由来自 Lightbend 的 Eugene Yokota (@eed3si9n) 和来自 Scala Center 的 Martin Duhem (@Duhemm) 共同创作。此 API 旨在抽象 Apache Ivy 以及替代的依赖项解析引擎 Ivy、缓存解析和 Coursier。
来自 Scala Center 的 Jorge (@jvican) 贡献了 Ivy 引擎的并行工件下载。它还引入了 Gigahorse OkHttp 作为网络 API,并使用 Square OkHttp 进行工件下载。
lm#124 by @eed3si9n/@Duhemm、lm#90 by @jvican/@jsuereth 和 lm#104 by @eed3si9n.
来自 Scala Center 的 Jorge (@jvican) 贡献了使用 Google Procol Buffer 的 Zinc 内部存储的二进制格式。新格式为我们提供了三个主要优势
依赖项锁定功能仍在开发中,但来自 Scala Center 的 Jorge (@jvican) 添加了一些相关功能,这些功能应该可以协同工作以允许依赖项锁定。
这里要感谢太多人了。请参阅 Credits