Releases: sbt/sbt
1.1.0-M1
1.0.2
This is a hotfix release for sbt 1.0.x series.
Bug fixes
- Fixes terminal echo issue. #3507 by @kczulko
- Fixes
deliver
task, and addsmakeIvyXml
as a more sensibly named task. #3487 by @cunei - Replaces the deprecated use of
OkUrlFactory
, and fixes connection leaks. lm#164 by @dpratt - Refixes false positive in DSL checker for setting keys. #3513 by @dwijnand
- Fixes
run
andbgRun
not picking up changes to directories in the classpath. #3517 by @dwijnand - Fixes
++
so it won't change the value ofcrossScalaVersion
. #3495/#3526 by @dwijnand - Fixes sbt server missing some messages. #3523 by @guillaumebort
- Refixes
consoleProject
. zinc#386 by @dwijnand - Adds JVM flag
sbt.gigahorse
to enable/disable the internal use of Gigahorse to workaround NPE inJavaNetAuthenticator
when used in conjunction withrepositories
override. lm#167 by @cunei - Adds JVM flag
sbt.server.autostart
to enable/disable the automatic starting of sbt server with the sbt shell. This also adds newstartServer
command to manually start the server. by @eed3si9n
Internal
- Fixes unused import warnings. #3533 by @razvan-panda
Contributors
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!
1.0.1
This is a hotfix release for sbt 1.0.x series.
Improvements
- Various improves around watch source feature. See below.
Bug fixes
- Fixes command support for cross building
+
command. The+
added to sbt 1.0 traveres over the subprojects, respectingcrossScalaVersions
; however, it no longer accepted commands as arguments. This brings back the support for it. #3446 by @jroper - Fixes
addSbtPlugin
to use the correct version of sbt during cross building. #3442 by @dwijnand - Fixes
run in Compile
task not includingRuntime
configuration, by reimplementingrun
in terms ofbgRun
. #3477 by @eed3si9n - Shows
actual
as a potential option ofinspect
#3335 by @Duhemm - Includes base directory to watched sources. #3439 by @Duhemm
- Adds an attempt to workaround intermittent
NullPointerException
arround logging. util#121 by @eed3si9n - Reverts a bad forward porting. #3481 by @eed3si9n
WatchSource
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
1.0.0
Features, fixes, changes with compatibility implications
See [Migrating from sbt 0.13.x][Migrating-from-sbt-013x] also.
- sbt 1.0 uses Scala 2.12 for build definitions and plugins. This also requires JDK 8.
- Many of the case classes are replaced with pseudo case classes generated using Contraband. Migrate
.copy(foo = xxx)
towithFoo(xxx)
.
For example,UpdateConfiguration
,RetrieveConfiguration
,PublishConfiguration
are refactored to use builder pattern. - Zinc 1 drops support for Scala 2.9 and earlier. Scala 2.10 must use 2.10.2 and above. Scala 2.11 must use 2.11.2 and above. (latest patch releases are recommended)
config("xyz")
must be directly assigned to a capitalizedval
, likeval Xyz = config("xyz")
. This captures the lhs identifier into the configuration so we can use it from the shell later.- Changes
publishTo
andotherResolvers
from SettingKeys to TaskKeys. [#2059][2059]/[#2662][2662] by [@dwijnand][@dwijnand] Path.relativizeFile(baseFile, file)
is renamed toIO.relativizeFile(baseFile, file)
.PathFinder
's.***
method is renamed to.allPaths
method.PathFinder.x_!(mapper)
is moved todef pair
onPathFinder
.- A number of the methods on
sbt.Path
(such asrelativeTo
andrebase
andflat
) are now no longer in the
default namespace by virtue of being mixed into the sbt package object. Usesbt.io.Path
to access them
again. - sbt 1.0 renames
Global
as scope component toZero
to disambiguate fromGlobalScope
. [@eed3si9n][@eed3si9n] - sbt 1.0 uses
ConfigRef
in places whereString
was used to reference configuration, such asupdate.value.configuration(...)
. Pass inConfiguration
, which implicitly converts toConfigRef
. - Changes
sourceArtifactTypes
anddocArtifactTypes
fromSet[String]
toSeq[String]
settings. - Renames early command feature from
--<command>
toearly(<command>)
. - Drops sbt 0.12 style hyphen-separated key names (use
publishLocal
instead ofpublish-local
). - Log options
-error
,-warn
,-info
,-debug
are added as shorthand for"early(error)"
etc. sbt.Process
andsbt.ProcessExtra
are dropped. Usescala.sys.process
instead.incOptions.value.withNameHashing(...)
option is removed because name hashing is always on.TestResult.Value
is now calledTestResult
.- The scripted plugin is cross-versioned now, so you must use
%%
when depending on it.
Dropped dreprecations:
- sbt 0.12 style
Build
trait that was deprecated in sbt 0.13.12, is removed. Please migrate to build.sbt. Auto plugins andBuild
trait do not work well together, and its feature is now largely subsumed by multi-project build.sbt. - sbt 0.12 style
Project(...)
constructor is restricted down to two parameters. This is becausesettings
parameter does not work well with Auto Plugins. Useproject
instead. - sbt 0.12 style key dependency operators
<<=
,<+=
,<++=
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. - Non-auto
sbt.Plugin
trait is dropped. Please migrate to AutoPlugin. Auto plugins are easier to configure, and work better with each other. - Removes the
settingsSets
method fromProject
(along withadd/setSbtFiles
). - Drops deprecated
InputTask
apply
method andinputTask
DSL method. UseDef.inputTask
andDef.spaceDelimited().parsed
. - Drops deprecated
ProjectReference
implicit lifts. UseRootProject(<uri>)
,RootProject(<file>)
orLocalProject(<string>)
. - Drops deprecated
seq(..)
DSL method. UseSeq
or pass in the settings without wrapping. - Drops deprecated
File
/Seq[File]
setting enrichments. Use.value
andDef.setting
. - Drops deprecated
SubProcess
apply
overload. UseSubProcess(ForkOptions(runJVMOptions = ..))
. - Drops
toError(opt: Option[String]): Unit
(equivalent toopt foreach sys.error
); if used to wrap
ScalaRun#run
then the replacement isscalaRun.run(...).failed foreach (sys error _.getMessage)
Features
- New incremental compiler called Zinc 1. Details below.
- The interactive shell adds network API. Details below.
- Library management API and parallel artifact download. See below.
- sbt 1.0's logging supports event logging. See below.
- Scala Center contributed static validation of
build.sbt
. See below - Ports sbt-cross-building's
^
and^^
commands for plugin cross building. See below.
Fixes
- Fixes test content log not showing up. [#3198][3198]/[util#80][util80] by [@eed3si9n][@eed3si9n]
- Fixes confusing log about "Unable to parse". [lm#98][lm98] by [@jvican][@jvican]
- Fixes
console
task. [zinc#295][zinc295] by [@dwijnand][@dwijnand] - Fixes spurious recompilations when unrelated constructor changes. [zinc#288][zinc288] by [@smarter][@smarter]
- Fixes restligeist macro for old operators. [#3218][3218] by [@eed3si9n][@eed3si9n]
- Fixes task caching of
update
task. [#3233][3233] by [@eed3si9n][@eed3si9n] - Fixes ncurses-JLine issue by updating to JLine 2.14.4. [util#81][util81] by [@Rogach][@Rogach]
Improvements
- Scala Center contributed a Java-friendly Zinc API. This was a overhaul of the Zinc internal API for a good Scala integration with other build tools. [zinc#304][zinc304] by [@jvican][@jvican]
- Scala Center contributed a binary format for Zinc's internal storage. See below
- The startup log level is dropped to
-error
in script mode usingscalas
. [#840][840] by [@eed3si9n][@eed3si9n] - Replace cross building support with sbt-doge. This allows builds with projects that have multiple different combinations of cross scala versions to be cross built correctly. The behaviour of ++ is changed so that it only updates the Scala version of projects that support that Scala version, but the Scala version can be post fixed with ! to force it to change for all projects. A -v argument has been added that prints verbose information about which projects are having their settings changed along with their cross scala versions. [#2613][2613] by [@jroper][@jroper]
ivyLoggingLevel
is dropped toUpdateLogging.Quiet
when CI environment is detected. [@eed3si9n][@eed3si9n]- Add logging of the name of the different
build.sbt
(matching*.sbt
) files used. [#1911][1911] by [@valydia][@valydia] - Add the ability to call
aggregate
for the current project inside a build sbt file. By [@xuwei-k][@xuwei-k] - Add new global setting
asciiGraphWidth
that controls the maximum width of the ASCII graphs printed by commands likeinspect tree
. Default value corresponds to the previously hardcoded value of 40 characters. By [@RomanIakovlev][@RomanIakovlev]. - Revamped documentation for Scopes, and added Scope Delegation. [@eed3si9n][@eed3si9n]
- Adds support for cross-versioned exclusions. [#1518][1518]/[lm#88][lm88] by [@jvican][@jvican]
- Adds new offline mode to the Ivy-based library management. [lm#92][lm92] by [@jvican][@jvican]
- A number of features related to dependency locking. See below.
- Improved eviction warning presentation. See below.
- A better main class detection. [zinc#287][zinc287] by [@smarter][@smarter]
- For faster startup, sbt will use Java refection to discover
autoImport
. [#3115][3115] by [@jvican][@jvican] - For faster startup, reuse the same global instance for parsing. [#3115][3115] by [@jvican][@jvican]
- Adds
InteractionService
from sbt-core-next to keep compatibility with sbt 0.13. [#3182][3182] by [@eed3si9n][@eed3si9n] - Adds new
WatchService
that abstractsPollingWatchService
and Java NIO. [io#47][io47] by [@Duhemm][@Duhemm] on behalf of The Scala Center. - Adds variants of
IO.copyFile
andIO.copyDirectory
that acceptsbt.io.CopyOptions()
. See below for details. Path.directory
andPath.contentOf
are donated from sbt-native-packager [io#38][io38] by [@muuki88][@muuki88]- ApiDiff feature used to debug Zinc uses Scala implementation borrowed from Dotty. [zinc#346][zinc346] by [@Krever][@Krever]
- In Zinc internal, make ExtractAPI use perRunCaches. [zinc#347][zinc347] by [@gheine][@gheine]
Internals
- Adopted Scalafmt for formatting the source code using neo-scalafmt.
- Scala Center contributed a redesign of the scripted test framework that has batch mode execution. Scripted now reuses the same sbt instance to run sbt tests, which reduces the CI build times by 50% [#3151][3151] by [@jvican][@jvican]
- sbt 1.0.0-M6 is built using sbt 1.0.0-M5. [#3184][3184] by [@dwijnand][@dwijnand]
Details of major changes
Zinc 1: Class-based name hashing
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 ...
1.0.0-RC3
See [sbt 1.0 roadmap and beta-1][sbt-1-0-roadmap] for scheduled timeline.
sbt 1.0.0-RC3
This is the RC-3 release of sbt 1.0.
Features, fixes, changes with compatibility implications
- Many of the case classes are replaced with pseudo case classes generated using Contraband. Migrate
.copy(foo = xxx)
towithFoo(xxx)
. - sbt 1.0 uses Scala 2.12 for build definitions and plugins. This also requires JDK 8.
- Non-auto
sbt.Plugin
trait is dropped. Please migrate to AutoPlugin. Auto plugins are easier to configure, and work better with each other. - sbt 0.12 style
Build
trait that was deprecated in sbt 0.13.12, is removed. Please migrate to build.sbt. Auto plugins andBuild
trait do not work well together, and its feature is now largely subsumed by multi-project build.sbt. - sbt 0.12 style
Project(...)
constructor is restricted down to two parameters. This is becausesettings
parameter does not work well with Auto Plugins. Useproject
instead. - sbt 0.12 style key dependency operators
<<=
,<+=
,<++=
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 0.12 style tuple enrichement DSL, which was deprecated in sbt 0.13.13, is opt-in under
sbt.TupleSyntax
. [#2762][2762]/[#3291][3291] by [@dwijnand][@dwijnand] - Zinc 1 drops support for Scala 2.9 and earlier. Scala 2.10 must use 2.10.2 and above. Scala 2.11 must use 2.11.2 and above. (latest patch releases are recommended)
config("tooling")
must be directly assigned to a capitalizedval
, likeval Tooling = config("tooling")
. This captures the lhs identifier into the configuration so we can use it from the shell later.- Changes
publishTo
andotherResolvers
from SettingKeys to TaskKeys. [#2059][2059]/[#2662][2662] by [@dwijnand][@dwijnand] Path.relativizeFile(baseFile, file)
is renamed toIO.relativizeFile(baseFile, file)
.PathFinder
's.***
method is renamed to.allPaths
method.PathFinder.x_!(mapper)
is moved todef pair
onPathFinder
.- Drops sbt 0.12 style hyphen-separated key names (use
publishLocal
instead ofpublish-local
). - Renames early command feature from
--<command>
toearly(<command>)
. - Log options
-error
,-warn
,-info
,-debug
are added as shorthand for"early(error)"
etc. sbt.Process
andsbt.ProcessExtra
are dropped. Usescala.sys.process
instead.incOptions.value.withNameHashing(...)
option is removed because name hashing is always on.TestResult.Value
is now calledTestResult
.- The scripted plugin is cross-versioned now, so you must use
%%
when depending on it - Removes the
settingsSets
method fromProject
(along withadd/setSbtFiles
). - Drops deprecated
InputTask
apply
method andinputTask
DSL method. UseDef.inputTask
andDef.spaceDelimited().parsed
. - Drops deprecated
ProjectReference
implicit lifts. UseRootProject(<uri>)
,RootProject(<file>)
orLocalProject(<string>)
. - Drops deprecated
seq(..)
DSL method. UseSeq
or pass in the settings without wrapping. - Drops deprecated
File
/Seq[File]
setting enrichments. Use.value
andDef.setting
. - Drops deprecated
SubProcess
apply
overload. UseSubProcess(ForkOptions(runJVMOptions = ..))
. - Drops
toError(opt: Option[String]): Unit
(equivalent toopt foreach sys.error
); if used to wrap
ScalaRun#run
then the replacement isscalaRun.run(...).failed foreach (sys error _.getMessage)
- A number of the methods on
sbt.Path
(such asrelativeTo
andrebase
andflat
) are now no longer in the
default namespace by virtue of being mixed into the sbt package object. Usesbt.io.Path
to access them
again. - sbt 1.0 renames
Global
as scope component toZero
to disambiguate fromGlobalScope
. [@eed3si9n][@eed3si9n] - sbt 1.0 uses
ConfigRef
in places whereString
was used to reference configuration, such asupdate.value.configuration(...)
. Pass inConfiguration
, which implicitly converts toConfigRef
. - Changes
sourceArtifactTypes
anddocArtifactTypes
fromSet[String]
toSeq[String]
settings. Command.process(..)
is removed. Use"cmd" :: state
.
The Scala Center is working with Lightbend to provide [an automatic migration tool][sbt-migration-rewrites].
Features
- New incremental compiler called Zinc 1. Details below.
- The interactive shell is adds network API. Details below.
- Library management API and parallel artifact download. See below.
- sbt 1.0's logging supports event logging. See below.
- Scala Center contributed static validation of
build.sbt
. See below - Ports sbt-cross-building's
^
and^^
commands for plugin cross building. See below.
Fixes
- Fixes test content log not showing up. [#3198][3198]/[util#80][util80] by [@eed3si9n][@eed3si9n]
- Fixes confusing log about "Unable to parse". [lm#98][lm98] by [@jvican][@jvican]
- Fixes
console
task. [zinc#295][zinc295] by [@dwijnand][@dwijnand] - Fixes spurious recompilations when unrelated constructor changes. [zinc#288][zinc288] by [@smarter][@smarter]
- Fixes restligeist macro for old operators. [#3218][3218] by [@eed3si9n][@eed3si9n]
- Fixes task caching of
update
task. [#3233][3233] by [@eed3si9n][@eed3si9n] - Fixes ncurses-JLine issue by updating to JLine 2.14.4. [util#81][util81] by [@Rogach][@Rogach]
Improvements
- Scala Center contributed a Java-friendly Zinc API. This was a overhaul of the Zinc internal API for a good Scala integration with other build tools. [zinc#304][zinc304] by [@jvican][@jvican]
- Scala Center contributed a binary format for Zinc's internal storage. See below
- The startup log level is dropped to
-error
in script mode usingscalas
. [#840][840] by [@eed3si9n][@eed3si9n] - Replace cross building support with sbt-doge. This allows builds with projects that have multiple different combinations of cross scala versions to be cross built correctly. The behaviour of ++ is changed so that it only updates the Scala version of projects that support that Scala version, but the Scala version can be post fixed with ! to force it to change for all projects. A -v argument has been added that prints verbose information about which projects are having their settings changed along with their cross scala versions. [#2613][2613] by [@jroper][@jroper]
ivyLoggingLevel
is dropped toUpdateLogging.Quiet
when CI environment is detected. [@eed3si9n][@eed3si9n]- Add logging of the name of the different
build.sbt
(matching*.sbt
) files used. [#1911][1911] by [@valydia][@valydia] - Add the ability to call
aggregate
for the current project inside a build sbt file. By [@xuwei-k][@xuwei-k] - Add new global setting
asciiGraphWidth
that controls the maximum width of the ASCII graphs printed by commands likeinspect tree
. Default value corresponds to the previously hardcoded value of 40 characters. By [@RomanIakovlev][@RomanIakovlev]. - Revamped documentation for Scopes, and added Scope Delegation. [@eed3si9n][@eed3si9n]
- Adds support for cross-versioned exclusions. [#1518][1518]/[lm#88][lm88] by [@jvican][@jvican]
- Adds new offline mode to the Ivy-based library management. [lm#92][lm92] by [@jvican][@jvican]
- A number of features related to dependency locking. See below.
- Improved eviction warning presentation. See below.
- A better main class detection. [zinc#287][zinc287] by [@smarter][@smarter]
- For faster startup, sbt will use Java refection to discover
autoImport
. [#3115][3115] by [@jvican][@jvican] - For faster startup, reuse the same global instance for parsing. [#3115][3115] by [@jvican][@jvican]
- Adds
InteractionService
from sbt-core-next to keep compatibility with sbt 0.13. [#3182][3182] by [@eed3si9n][@eed3si9n] - Adds new
WatchService
that abstractsPollingWatchService
and Java NIO. [io#47][io47] by [@Duhemm][@Duhemm] on behalf of The Scala Center. - Adds variants of
IO.copyFile
andIO.copyDirectory
that acceptsbt.io.CopyOptions()
. See below for details. Path.directory
andPath.contentOf
are donated from sbt-native-packager [io#38][io38] by [@muuki88][@muuki88]- ApiDiff feature used to debug Zinc uses Scala implementation borrowed from Dotty. [zinc#346][zinc346] by [@Krever][@Krever]
- In Zinc internal, make ExtractAPI use perRunCaches. [zinc#347][zinc347] by [@gheine][@gheine]
Internals
- Adopted Scalafmt for formatting the source code using neo-scalafmt.
- Scala Center contributed a redesign of the scripted test framework that has batch mode execution. Scripted now reuses the same sbt instance to run sbt tests, which reduces the CI build times by 50% [#3151][3151] by [@jvican][@jvican]
- sbt 1.0.0-M6 is built using sbt 1.0.0-M5. [#3184][3184] by [@dwijnand][@dwijnand]
Details of major changes
Zinc 1: Class-based name hashing
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 MatchCodeGe...
0.13.16
Fixes with compatibility implications
- Removes the "hit [ENTER] to switch to interactive mode" feature. Run
sbt xxx shell
to stay in shell afterxxx
. #3091/#3153 by @dwijnand
Improvements
- Improves the new startup messages. See below.
- Ports sbt-cross-building's
^
and^^
commands for plugin cross building. See below. - Adds
Zero
scope component for sbt 1.0 compatibility. #3179 by @eed3si9n - Backports
withXXX
methods forModuleID
andArtifact
for sbt 1.0 compatibility. #3215 by @eed3si9n
Bug fixes
- Fixes the new startup messages. See below.
- Fixes forward compatibility of Scripted plugin with sbt 1.0.0-RC2. #3329 by @dwijnand
- Fixes ScalaTest nested suite test names being reported as "(It is not a test)". #3154 by @jameskoch
- Fixes default
scalaBinaryVersion
for Dotty. #3152 by @smarter - Updates JLine dependency to 2.14.4 to work around ncurses change causing
NumberFormatException
. #3265 by @Rogach
sbt-cross-building
@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-RC2
Your plugin will now build with sbt 1.0.0-RC2 (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
, 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-RC2")
Then, run:
^ compile
Eviction warning presentation
sbt 0.13.16 improves the eviction warning presentation.
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
Improvements and bug fixes to the startup messages
sbt writes out the sbt.version
in project/build.properties
if it is missing.
sbt 0.13.16 fixes the logging when it happens by using the logger.
We encourage the use of the sbt shell by running sbt
, instead of running sbt compile
from the terminal repeatedly.
The sbt shell keeps the JVM warm, and there is a significant performance improvement gained for your compilation.
The startup message that we added in sbt 0.13.15 was a bit too aggressive, so we are toning it down in 0.13.16.
It will only be triggered for sbt compile
, and it can also be suppressed with suppressSbtShellNotification := true
.
0.13.16-RC1
Fixes with compatibility implications
- Removes the "hit [ENTER] to switch to interactive mode" feature. Run
sbt xxx shell
to stay in shell afterxxx
. #3091/#3153 by @dwijnand
Improvements
- Improves the new startup messages. See below.
- Ports sbt-cross-building's
^
and^^
commands for plugin cross building. See below. - Adds
Zero
scope component for sbt 1.0 compatibility. #3179 by @eed3si9n - Backports
withXXX
methods forModuleID
andArtifact
for sbt 1.0 compatibility. #3215 by @eed3si9n
Bug fixes
- Fixes the new startup messages. See below.
- Fixes forward compatibility of Scripted plugin with sbt 1.0.0-RC2. #3329 by @dwijnand
- Fixes ScalaTest nested suite test names being reported as "(It is not a test)". #3154 by @jameskoch
- Fixes default
scalaBinaryVersion
for Dotty. #3152 by @smarter - Updates JLine dependency to 2.14.4 to work around ncurses change causing
NumberFormatException
. #3265 by @Rogach
sbt-cross-building
@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-RC2
Your plugin will now build with sbt 1.0.0-RC2 (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
, 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-RC2")
Then, run:
^ compile
Eviction warning presentation
sbt 0.13.16 improves the eviction warning presentation.
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
Improvements and bug fixes to the startup messages
sbt writes out the sbt.version
in project/build.properties
if it is missing.
sbt 0.13.16 fixes the logging when it happens by using the logger.
We encourage the use of the sbt shell by running sbt
, instead of running sbt compile
from the terminal repeatedly.
The sbt shell keeps the JVM warm, and there is a significant performance improvement gained for your compilation.
The startup message that we added in sbt 0.13.15 was a bit too aggressive, so we are toning it down in 0.13.16.
It will only be triggered for sbt compile
, and it can also be suppressed with suppressSbtShellNotification := true
.
1.0.0-RC2
See [sbt 1.0 roadmap and beta-1][sbt-1-0-roadmap] for scheduled timeline.
sbt 1.0.0-RC2
This is the RC-2 release of sbt 1.0.
Features, fixes, changes with compatibility implications
- Many of the case classes are replaced with pseudo case classes generated using Contraband. Migrate
.copy(foo = xxx)
towithFoo(xxx)
. - sbt 1.0 uses Scala 2.12 for build definitions and plugins. This also requires JDK 8.
- Non-auto
sbt.Plugin
trait is dropped. Please migrate to AutoPlugin. Auto plugins are easier to configure, and work better with each other. - sbt 0.12 style
Build
trait that was deprecated in sbt 0.13.12, is removed. Please migrate to build.sbt. Auto plugins andBuild
trait do not work well together, and its feature is now largely subsumed by multi-project build.sbt. - sbt 0.12 style
Project(...)
constructor is restricted down to two parameters. This is becausesettings
parameter does not work well with Auto Plugins. Useproject
instead. - sbt 0.12 style key dependency operators
<<=
,<+=
,<++=
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. - Zinc 1 drops support for Scala 2.9 and earlier. Scala 2.10 must use 2.10.2 and above. Scala 2.11 must use 2.11.2 and above. (latest patch releases are recommended)
config("tooling")
must be directly assigned to a capitalizedval
, likeval Tooling = config("tooling")
. This captures the lhs identifier into the configuration so we can use it from the shell later.- Changes
publishTo
andotherResolvers
from SettingKeys to TaskKeys. [#2059][2059]/[#2662][2662] by [@dwijnand][@dwijnand] Path.relativizeFile(baseFile, file)
is renamed toIO.relativizeFile(baseFile, file)
.PathFinder
's.***
method is renamed to.allPaths
method.PathFinder.x_!(mapper)
is moved todef pair
onPathFinder
.- Drops sbt 0.12 style hyphen-separated key names (use
publishLocal
instead ofpublish-local
). - Renames early command feature from
--<command>
toearly(<command>)
. - Log options
-error
,-warn
,-info
,-debug
are added as shorthand for"early(error)"
etc. sbt.Process
andsbt.ProcessExtra
are dropped. Usescala.sys.process
instead.incOptions.value.withNameHashing(...)
option is removed because name hashing is always on.TestResult.Value
is now calledTestResult
.- The scripted plugin is cross-versioned now, so you must use
%%
when depending on it - Removes the
settingsSets
method fromProject
(along withadd/setSbtFiles
). - Drops deprecated
InputTask
apply
method andinputTask
DSL method. UseDef.inputTask
andDef.spaceDelimited().parsed
. - Drops deprecated
ProjectReference
implicit lifts. UseRootProject(<uri>)
,RootProject(<file>)
orLocalProject(<string>)
. - Drops deprecated
seq(..)
DSL method. UseSeq
or pass in the settings without wrapping. - Drops deprecated
File
/Seq[File]
setting enrichments. Use.value
andDef.setting
. - Drops deprecated
SubProcess
apply
overload. UseSubProcess(ForkOptions(runJVMOptions = ..))
. - Drops
toError(opt: Option[String]): Unit
(equivalent toopt foreach sys.error
); if used to wrap
ScalaRun#run
then the replacement isscalaRun.run(...).failed foreach (sys error _.getMessage)
- A number of the methods on
sbt.Path
(such asrelativeTo
andrebase
andflat
) are now no longer in the
default namespace by virtue of being mixed into the sbt package object. Usesbt.io.Path
to access them
again. - sbt 1.0 renames
Global
as scope component toZero
to disambiguate fromGlobalScope
. [@eed3si9n][@eed3si9n] - sbt 1.0 uses
ConfigRef
in places whereString
was used to reference configuration, such asupdate.value.configuration(...)
. Pass inConfiguration
, which implicitly converts toConfigRef
. - Changes
sourceArtifactTypes
anddocArtifactTypes
fromSet[String]
toSeq[String]
settings.
The Scala Center is working with Lightbend to provide [an automatic migration tool][sbt-migration-rewrites].
Features
- New incremental compiler called Zinc 1. Details below.
- The interactive shell is adds network API. Details below.
Fixes
- Fixes test content log not showing up. [#3198][3198]/[util#80][util80] by [@eed3si9n][@eed3si9n]
- Fixes confusing log about "Unable to parse". [lm#98][lm98] by [@jvican][@jvican]
- Fixes
console
task. [zinc#295][zinc295] by [@dwijnand][@dwijnand] - Fixes spurious recompilations when unrelated constructor changes. [zinc#288][zinc288] by [@smarter][@smarter]
- Fixes restligeist macro for old operators. [#3218][3218] by [@eed3si9n][@eed3si9n]
- Fixes task caching of
update
task. [#3233][3233] by [@eed3si9n][@eed3si9n] - Fixes ncurses-JLine issue by updating to JLine 2.14.4. [util#81][util81] by [@Rogach][@Rogach]
Improvements
- Scala Center contributed a Java-friendly Zinc API. This was a overhaul of the Zinc internal API for a good Scala integration with other build tools. [zinc#304][zinc304] by [@jvican][@jvican]
- Scala Center contributed a binary format for Zinc's internal storage. See below
- Scala Center contributed static validation of
build.sbt
. See below - Library management API and parallel artifact download. See below.
- The startup log level is dropped to
-error
in script mode usingscalas
. [#840][840] by [@eed3si9n][@eed3si9n] - Replace cross building support with sbt-doge. This allows builds with projects that have multiple different combinations of cross scala versions to be cross built correctly. The behaviour of ++ is changed so that it only updates the Scala version of projects that support that Scala version, but the Scala version can be post fixed with ! to force it to change for all projects. A -v argument has been added that prints verbose information about which projects are having their settings changed along with their cross scala versions. [#2613][2613] by [@jroper][@jroper]
ivyLoggingLevel
is dropped toUpdateLogging.Quiet
when CI environment is detected. [@eed3si9n][@eed3si9n]- Add logging of the name of the different
build.sbt
(matching*.sbt
) files used. [#1911][1911] by [@valydia][@valydia] - Add the ability to call
aggregate
for the current project inside a build sbt file. By [@xuwei-k][@xuwei-k] - Add new global setting
asciiGraphWidth
that controls the maximum width of the ASCII graphs printed by commands likeinspect tree
. Default value corresponds to the previously hardcoded value of 40 characters. By [@RomanIakovlev][@RomanIakovlev]. - Revamped documentation for Scopes, and added Scope Delegation. [@eed3si9n][@eed3si9n]
- Ports sbt-cross-building's
^
and^^
commands for plugin cross building. See below. - Adds support for cross-versioned exclusions. [#1518][1518]/[lm#88][lm88] by [@jvican][@jvican]
- Adds new offline mode to the Ivy-based library management. [lm#92][lm92] by [@jvican][@jvican]
- A number of features related to dependency locking. See below.
- Improved eviction warning presentation. See below.
- A better main class detection. [zinc#287][zinc287] by [@smarter][@smarter]
- For faster startup, sbt will use Java refection to discover
autoImport
. [#3115][3115] by [@jvican][@jvican] - For faster startup, reuse the same global instance for parsing. [#3115][3115] by [@jvican][@jvican]
- Adds
InteractionService
from sbt-core-next to keep compatibility with sbt 0.13. [#3182][3182] by [@eed3si9n][@eed3si9n] - Adds new
WatchService
that abstractsPollingWatchService
and Java NIO. [io#47][io47] by [@Duhemm][@Duhemm] on behalf of The Scala Center. - Adds variants of
IO.copyFile
andIO.copyDirectory
that acceptsbt.io.CopyOptions()
. See below for details. Path.directory
andPath.contentOf
are donated from sbt-native-packager [io#38][io38] by [@muuki88][@muuki88]- ApiDiff feature used to debug Zinc uses Scala implementation borrowed from Dotty. [zinc#346][zinc346] by [@Krever][@Krever]
- In Zinc internal, make ExtractAPI use perRunCaches. [zinc#347][zinc347] by [@gheine][@gheine]
Internals
- Adopted Scalafmt for formatting the source code using neo-scalafmt.
- Scala Center contributed a redesign of the scripted test framework that has batch mode execution. Scripted now reuses the same sbt instance to run sbt tests, which reduces the CI build times by 50% [#3151][3151] by [@jvican][@jvican]
- sbt 1.0.0-M6 is built using sbt 1.0.0-M5. [#3184][3184] by [@dwijnand][@dwijnand]
Details of major changes
Zinc 1: Class-based name hashing
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 f...
1.0.0-M6
See [sbt 1.0 roadmap and beta-1][sbt-1-0-roadmap] for scheduled timeline.
sbt 1.0.0-M6
This is the beta-2 release of sbt 1.0.
Changes since sbt 1.0.0-M5
Features, fixes, changes with compatibility implications
The Scala Center is working with Lightbend to provide an automatic migration tool.
- sbt 1.0 renames
Global
as scope component toZero
to disambiguate fromGlobalScope
. [@eed3si9n][@eed3si9n]
Fixes
- Fixes test content log not showing up. [#3198][3198]/[util#80][util80] by [@eed3si9n][@eed3si9n]
- Fixes confusing log about "Unable to parse". [lm#98][lm98] by [@jvican][@jvican]
- Fixes
console
task. [zinc#295][zinc295] by [@dwijnand][@dwijnand] - Fixes spurious recompilations when unrelated constructor changes. [zinc#288][zinc288] by [@smarter][@smarter]
- Fixes restligeist macro for old operators. [#3218][3218] by [@eed3si9n][@eed3si9n]
- Fixes task caching of
update
task. [#3233][3233] by [@eed3si9n][@eed3si9n]
Improvements
- Scala Center contributed a Java-friendly Zinc API. This was a overhaul of the Zinc internal API for a good Scala integration with other build tools. [zinc#304][zinc304] by [@jvican][@jvican]
- Ivy engine with parallel artifact download. See below.
- Scala Center contributed static validation of
build.sbt
. See below - Revamped documentation for Scopes, and added Scope Delegation. [@eed3si9n][@eed3si9n]
- Ports sbt-cross-building's
^
and^^
commands for plugin cross building. See below. - Adds support for cross-versioned exclusions. [#1518][1518]/[lm#88][lm88] by [@jvican][@jvican]
- Adds new offline mode to the Ivy-based library management. [lm#92][lm92] by [@jvican][@jvican]
- A number of features related to dependency locking. See below.
- Improved eviction warning presentation. See below.
- A better main class detection. [zinc#287][zinc287] by [@smarter][@smarter]
- For faster startup, sbt will use Java refection to discover
autoImport
. [#3115][3115] by [@jvican][@jvican] - For faster startup, reuse the same global instance for parsing. [#3115][3115] by [@jvican][@jvican]
- Adds
InteractionService
from sbt-core-next to keep compatibility with sbt 0.13. [#3182][3182] by [@eed3si9n][@eed3si9n]
Static validation of build.sbt
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.
[#3216][3216] and [#3225][3225] by [@jvican][@jvican]
Internals
- Adopted Scalafmt for formatting the source code using neo-scalafmt.
- Scala Center contributed a redesign of the scripted test framework that has batch mode execution. Scripted now reuses the same sbt instance to run sbt tests, which reduces the CI build times by 50% [#3151][3151] by [@jvican][@jvican]
- sbt 1.0.0-M6 is built using sbt 1.0.0-M5. [#3184][3184] by [@dwijnand][@dwijnand]
Ivy engine with parallel artifact download
sbt 1.0 adds parallel artifact download while still using Ivy for resolution, contributed by Scala Center.
It also introduces Gigahorse OkHttp as the Network API, and it uses Square OkHttp for artifact download as well.
[lm#90][lm90] by [@jvican][@jvican]/[@jsuereth][@jsuereth]
and [lm#104][lm104] by [@eed3si9n][@eed3si9n].
Dependency locking
Dependency locking feature is still in progress, but Jorge ([@jvican][@jvican]) from Scala Center has added a number of related features
that would should work together to allow dependency locking.
- Frozen mode to the Ivy-based library management, which makes sure that the resolution is always intransitive. [lm#100][lm100]
- Adds support to specify a resolver for dependencies. [lm#97][lm97]
- Adds "managed checksums", which tells Ivy to skip the checksum process. [lm#111][lm111]
Eviction warning presentation
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
[#3202][3202] by [@eed3si9n][@eed3si9n]
sbt-cross-building
[@jrudolph][@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][3133] by [@eed3si9n][@eed3si9n] (forward ported from 0.13.16-M1)
notes
- v1.0.0-M5...v1.0.0-M6
- sbt/zinc@v1.0.0-X14...v1.0.0-X16
- sbt/librarymanagement@v1.0.0-X10...v1.0.0-X15
- sbt/util@v1.0.0-M23...v1.0.0-M24
sbt 1.0.0-M5
This is the beta-1 release of sbt 1.0.
There's no binary compatibility with sbt 0.13 or other future 1.0.0-Mx versions.
Features, fixes, changes with compatibility implications
We are working with Scala Center to provide [an automatic migration tool][sbt-migration-rewrites].
- sbt 1.0 uses Scala 2.12 for build definitions and plugins. This also requires JDK 8.
- Non-auto
sbt.Plugin
trait is dropped. Please migrate to AutoPlugin. Auto plugins are easier to configure, and work better with each other. - sbt 0.12 style
Build
trait that was deprecated in sbt 0.13.12, is removed. Please migrate to build.sbt. Auto plugins andBuild
trait do not work well together, and its feature is now largely subsumed by multi-project build.sbt. - sbt 0.12 style
Project(...)
constructor is restricted down to two parameters. This is becausesettings
parameter does not work well with Auto Plugins. Useproject
instead. - sbt 0.12 style key dependency operators
<<=
,<+=
,<++=
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. - Zinc 1 drops support for Scala 2.9 and earlier. Scala 2.10 must use 2.10.2 and above. Scala 2.11 must use 2.11.2 and above. (latest patch releases are recommended)
- Many of the case classes are replaced with pseudo case classes generated using Contraband. Migrate
.copy(foo = xxx)
towithFoo(xxx)
. - Changes
publishTo
andotherResolvers
from SettingKeys to TaskKeys. [#2059][2059]/[#2662][2662] by [@dwijnand][@dwijnand] PathFinder
's.***
method is renamed to.allPaths
method.- Drops sbt 0.12 style hyphen-separated key names (use
publishLocal
instead ofpublish-local
). - Renames early command feature from
--<command>
toearly(<command>)
. - Log options
-error
,-warn
,-info
,-debug
are added as shorthand for"early(error)"
etc. sbt.Process
andsbt.ProcessExtra
are dropped. Usescala.sys.process
instead.incOptions.value.withNameHashing(...)
option is removed because name hashing is always on.TestResult.Value
is now calledTestResult
.- The scripted plugin is cross-versioned now, so you must use
%%
when depending on it - Removes the
settingsSets
method fromProject
(along withadd/setSbtFiles
). - Drops deprecated
InputTask
apply
method andinputTask
DSL method. UseDef.inputTask
andDef.spaceDelimited().parsed
. - Drops deprecated
ProjectReference
implicit lifts. UseRootProject(<uri>)
,RootProject(<file>)
orLocalProject(<string>)
. - Drops deprecated
seq(..)
DSL method. UseSeq
or pass in the settings without wrapping. - Drops deprecated
File
/Seq[File]
setting enrichments. Use.value
andDef.setting
. - Drops deprecated
SubProcess
apply
overload. UseSubProcess(ForkOptions(runJVMOptions = ..))
. - Drops
toError(opt: Option[String]): Unit
(equivalent toopt foreach sys.error
); if used to wrap
ScalaRun#run
then the replacement isscalaRun.run(...).failed foreach (sys error _.getMessage)
- A number of the methods on
sbt.Path
(such asrelativeTo
andrebase
andflat
) are now no longer in the
default namespace by virtue of being mixed into the sbt package object. Usesbt.io.Path
to access them
again.
Features
- New incremental compiler called Zinc...
0.13.16-M1
Improvements
- Improves the new startup messages. See below.
- Ports sbt-cross-building's
^
and^^
commands for plugin cross building. See below.
Bug fixes
- Fixes the new startup messages. See below.
Improvements and bug fixes to the new startup messages
The two new startup messages introduced in sbt 0.13.15 are:
- when writing out
sbt.version
, for build reproducability, and - when informing the user about sbt's shell, for the performance improvement
When writing out sbt.version
the messaging now:
- correctly uses a logger rather than println
- honours the log level set, for instance by
--error
- never executes when sbt "new" is being run
When informing the user about sbt's shell the messaging now:
- is a 1 line message, rather than 3
- is at info level, rather than warn level
- can be suppressed with
suppressSbtShellNotification := true
- only triggers when
compile
is being run - never shows when sbt
new
is being run
#3091/#3097/#3147 by @dwijnand
sbt-cross-building
@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