这是 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