This is a hotfix release for sbt 1.0.x series.
ArrayIndexOutOfBoundsException
on Ivy when running on Java 9. ivy#27 by @xuwei-k
-jvm-debug
on Java 9. launcher-package197 by @mkurz
run
outputting debug level logs. #3655/#3717 by @cunei
testQuick
. #3680/#3720 by @OlegYch
templateStats()
not being thread-safe. #3743 by @cunei
http:
and https:
to be more plugin friendly. lm183 by @tpunder
bc
by using expr
. launcher-package#199 by @thatfulvioguy
A huge thank you to everyone who’s helped improve sbt and Zinc 1 by using them, reporting bugs, improving our documentation, porting builds, porting plugins, and submitting and reviewing pull requests.
This release was brought to you by 17 contributors, according to git shortlog -sn --no-merges v1.0.3..v1.0.4
on sbt, zinc, librarymanagement, util, io, and website: 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. Thank you!
This is a hotfix release for sbt 1.0.x series.
~
recompiling in loop (when a source generator or sbt-buildinfo is present). #3501/#3634 by @dwijnand
null
for getGenericParameterTypes
. zinc#446 by @jvican
/
in Ivy style patterns. lm#170 by @laughedelic
sbt.watch.mode
system property to allow switching back to old polling behaviour for watch. See below for more details.
sbt 1.0.0 introduced a new mechanism for watching for source changes based on the NIO WatchService
in Java 1.7. On
some platforms (namely macOS) this has led to long delays before changes are picked up. An alternative WatchService
for these platforms is planned for sbt 1.1.0 (#3527), in the meantime an option to select which watch service
has been added.
The new sbt.watch.mode
JVM flag has been added with the following supported values:
polling
: (default for macOS) poll the filesystem for changes (mechanism used in sbt 0.13).
nio
(default for other platforms): use the NIO based WatchService
.
If you are experiencing long delays on a non-macOS machine then try adding -Dsbt.watch.mode=polling
to your sbt
options.
#3597 by @stringbean
A huge thank you to everyone who’s helped improve sbt and Zinc 1 by using them, reporting bugs, improving our documentation, porting builds, porting plugins, and submitting and reviewing pull requests.
This release was brought to you by 15 contributors, according to git shortlog -sn --no-merges v1.0.2..v1.0.3
on sbt, zinc, librarymanagement, util, io, and website: 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ć. Thank you!
This is a hotfix release for sbt 1.0.x series.
deliver
task, and adds makeIvyXml
as a more sensibly named task. #3487 by @cunei
OkUrlFactory
, and fixes connection leaks. lm#164 by @dpratt
run
and bgRun
not picking up changes to directories in the classpath. #3517 by @dwijnand
++
so it won’t change the value of crossScalaVersion
. #3495/#3526 by @dwijnand
consoleProject
. zinc#386 by @dwijnand
sbt.gigahorse
to enable/disable the internal use of Gigahorse to workaround NPE in JavaNetAuthenticator
when used in conjunction with repositories
override. lm#167 by @cunei
sbt.server.autostart
to enable/disable the automatic starting of sbt server with the sbt shell. This also adds new startServer
command to manually start the server. by @eed3si9n
A huge thank you to everyone who’s helped improve sbt and Zinc 1 by using them, reporting bugs, improving our documentation, porting plugins, and submitting and reviewing pull requests.
This release was brought to you by 19 contributors, according to git shortlog -sn --no-merges v1.0.1..v1.0.2
on sbt, zinc, librarymanagement, and website: 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, and Wiesław Popielarski. Thank you!
This is a hotfix release for sbt 1.0.x series.
+
command. The +
added to sbt 1.0 traveres over the subprojects, respecting crossScalaVersions
; however, it no longer accepted commands as arguments. This brings back the support for it. #3446 by @jroper
addSbtPlugin
to use the correct version of sbt during cross building. #3442 by @dwijnand
run in Compile
task not including Runtime
configuration, by reimplementing run
in terms of bgRun
. #3477 by @eed3si9n
actual
as a potential option of inspect
#3335 by @Duhemm
NullPointerException
arround logging. util#121 by @eed3si9n
The watch source feature went through a major change from sbt 0.13 to sbt 1.0 using NIO; however, it did not have clear migration path, so we are rectifying that in sbt 1.0.1.
First, sbt.WatchSource
is a new alias for sbt.internal.io.Source
. Hopefully this is easy enough to remember because the key is named watchSources
. Next, def apply(base: File)
and def apply(base: File, includeFilter: FileFilter, excludeFilter: FileFilter)
constructors were added to the companion object of sbt.WatchSource
.
For backward compatiblity, sbt 1.0.1 adds +=
support (Append
instance) from File
to Seq[WatchSource]
.
So, if you have a directory you want to watch:
watchSources += WatchSource(sourceDirectory.value)
If you have a list of files:
watchSources ++= (sourceDirectory.value ** "*.scala").get
#3438 by @Duhemm; #3478 and io#74 by @eed3si9n
See Migrating from sbt 0.13.x also.
.copy(foo = xxx)
to withFoo(xxx)
.
For example, UpdateConfiguration
, RetrieveConfiguration
, PublishConfiguration
are refactored to use builder pattern.
config("xyz")
must be directly assigned to a capitalized val
, like val Xyz = config("xyz")
. This captures the lhs identifier into the configuration so we can use it from the shell later.
publishTo
and otherResolvers
from SettingKeys to TaskKeys. #2059/#2662 by @dwijnand
Path.relativizeFile(baseFile, file)
is renamed to IO.relativizeFile(baseFile, file)
.
PathFinder
’s .***
method is renamed to .allPaths
method.
PathFinder.x_!(mapper)
is moved to def pair
on PathFinder
.
sbt.Path
(such as relativeTo
and rebase
and flat
) are now no longer in the
default namespace by virtue of being mixed into the sbt package object. Use sbt.io.Path
to access them
again.
Global
as scope component to Zero
to disambiguate from GlobalScope
. @eed3si9n
ConfigRef
in places where String
was used to reference configuration, such as update.value.configuration(...)
. Pass in Configuration
, which implicitly converts to ConfigRef
.
sourceArtifactTypes
and docArtifactTypes
from Set[String]
to Seq[String]
settings.
--<command>
to early(<command>)
.
publishLocal
instead of publish-local
).
-error
, -warn
, -info
, -debug
are added as shorthand for "early(error)"
etc.
sbt.Process
and sbt.ProcessExtra
are dropped. Use scala.sys.process
instead.
incOptions.value.withNameHashing(...)
option is removed because name hashing is always on.
TestResult.Value
is now called TestResult
.
%%
when depending on it.
Dropped dreprecations:
Build
trait that was deprecated in sbt 0.13.12, is removed. Please migrate to build.sbt. Auto plugins and Build
trait do not work well together, and its feature is now largely subsumed by multi-project build.sbt.
Project(...)
constructor is restricted down to two parameters. This is because settings
parameter does not work well with Auto Plugins. Use project
instead.
<<=
, <+=
, <++=
are removed. Please migrate to :=, +=, and ++=. These operators have been sources of confusion for many users, and have long been removed from 0.13 docs, and have been formally deprecated since sbt 0.13.13.
sbt.Plugin
trait is dropped. Please migrate to AutoPlugin. Auto plugins are easier to configure, and work better with each other.
settingsSets
method from Project
(along with add/setSbtFiles
).
InputTask
apply
method and inputTask
DSL method. Use Def.inputTask
and Def.spaceDelimited().parsed
.
ProjectReference
implicit lifts. Use RootProject(<uri>)
, RootProject(<file>)
or LocalProject(<string>)
.
seq(..)
DSL method. Use Seq
or pass in the settings without wrapping.
File
/Seq[File]
setting enrichments. Use .value
and Def.setting
.
SubProcess
apply
overload. Use SubProcess(ForkOptions(runJVMOptions = ..))
.
toError(opt: Option[String]): Unit
(equivalent to opt foreach sys.error
); if used to wrap
ScalaRun#run
then the replacement is scalaRun.run(...).failed foreach (sys error _.getMessage)
console
task. zinc#295 by @dwijnand
update
task. #3233 by @eed3si9n
build.sbt
. See below
-error
in script mode using scalas
. #840 by @eed3si9n
ivyLoggingLevel
is dropped to UpdateLogging.Quiet
when CI environment is detected. @eed3si9n
build.sbt
(matching *.sbt
) files used. #1911 by @valydia
aggregate
for the current project inside a build sbt file. By @xuwei-k
asciiGraphWidth
that controls the maximum width of the ASCII graphs printed by commands like inspect tree
. Default value corresponds to the previously hardcoded value of 40 characters. By @RomanIakovlev.
^
and ^^
commands for plugin cross building. See below.
autoImport
. #3115 by @jvican
InteractionService
from sbt-core-next to keep compatibility with sbt 0.13. #3182 by @eed3si9n
WatchService
that abstracts PollingWatchService
and Java NIO. io#47 by @Duhemm on behalf of The Scala Center.
IO.copyFile
and IO.copyDirectory
that accept sbt.io.CopyOptions()
. See below for details.
Path.directory
and Path.contentOf
are donated from sbt-native-packager io#38 by @muuki88
A major improvement brought into Zinc 1.0 by Grzegorz Kossakowski (commissioned by Lightbend) is class-based name hashing, which will speed up the incremental compilation of Scala in large projects.
Zinc 1.0’s name hashing tracks your code dependendencies at the class level, instead of at the source file level. The GitHub issue sbt/sbt#1104 lists some comparisons of adding a method to an existing class in some projects:
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)
This depends on some factors such as how your classes are organized, but you can see 3x ~ 40x improvements. The reason for the speedup is because it compiles fewer source files than before by untangling the classes from source files. In the example adding a method to scala/scala’s Platform class, sbt 0.13’s name hashing used to compile 72 sources, but the new Zinc compiles 6 sources.
xsbti.compile
package such as IncOptions
hides the constructor. Use the factory method xsbti.compile.Foo.of(...)
.
ivyScala: IvyScala
key to scalaModuleInfo: ScalaModuleInfo
.
xsbti.Reporter#log(...)
takes xsbti.Problem
as the parameter. Call log(problem.position, problem.message, problem.severity)
to delegate to the older log(...)
.
xsbi.Maybe
, xsbti.F0
, and sxbti.F1
are changed to corresponding Java 8 classes java.util.Optional
, java.util.Supplier
and java.util.Function
.
sbt 1.0 includes server feature, which allows IDEs and other tools to query the build for settings, and invoke commands via a JSON API. Similar to the way that the interactive shell in sbt 0.13 is implemented with shell
command, “server” is also just shell
command that listens to both human input and network input. As a user, there should be minimal impact because of the server.
In March 2016, we rebooted the “server” feature to make it as small as possible. We worked in collaboration with JetBrains’ @jastice who works on IntelliJ’s sbt interface to narrow down the feature list. sbt 1.0 will not have all the things we originally wanted, but in the long term, we hope to see better integration between IDE and sbt ecosystem using this system. For example, IDEs will be able to issue the compile task and retrieve compiler warning as JSON events:
{"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"}
Another related feature that was added is the bgRun
task which, for example, enables a server process to be run in the background while you run tests against it.
sbt 1.0 prohibits .value
calls inside the bodies of if expressions and anonymous functions in a task, @sbtUnchecked
annotation can be used to override the check.
The static validation also catches if you forget to call .value
in a body of a task.
sbt 1.0 improves the eviction warning presetation.
Before:
[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
After:
[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’s sbt-cross-building is a plugin author’s plugin.
It adds cross command ^
and sbtVersion switch command ^^
, similar to +
and ++
,
but for switching between multiple sbt versions across major versions.
sbt 0.13.16 merges these commands into sbt because the feature it provides is useful as we migrate plugins to sbt 1.0.
To switch the sbtVersion in pluginCrossBuild
from the shell use:
^^ 1.0.0-M5
Your plugin will now build with sbt 1.0.0-M5 (and its Scala version 2.12.2).
If you need to make changes specific to a sbt version, you can now include them into src/main/scala-sbt-0.13
,
and src/main/scala-sbt-1.0.0-M5
, where the binary sbt version number is used as postfix.
To run a command across multiple sbt versions, set:
crossSbtVersions := Vector("0.13.15", "1.0.0-M5")
Then, run:
^ compile
#3133 by @eed3si9n (forward ported from 0.13.16-M1)
sbt IO 1.0 add variant of IO.copyFile
and IO.copyDirectory
that accept sbt.io.CopyOptions()
.
CopyOptions()
is an example of pseudo case class similar to the builder pattern.
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 adds Library management API co-authored by Eugene Yokota (@eed3si9n) from Lightbend and Martin Duhem (@Duhemm) from Scala Center. This API aims to abstract Apache Ivy as well as alternative dependency resolution engines Ivy, cached resolution, and Coursier.
Parallel artifact download for Ivy engine was contributed by Jorge (@jvican) from Scala Center. It also introduces Gigahorse OkHttp as the Network API, and it uses Square OkHttp for artifact download as well.
lm#124 by @eed3si9n/@Duhemm, lm#90 by @jvican/@jsuereth and lm#104 by @eed3si9n.
Jorge (@jvican) from Scala Center contributed a binary format for Zinc’s internal storage using Google Procol Buffer. The new format provides us with three main advantages:
Dependency locking feature is still in progress, but Jorge (@jvican) from Scala Center has added a number of related features that would should work together to allow dependency locking.
Too many people to thank here. See Credits