Navigation Menu

Skip to content

Releases: sbt/sbt

1.1.0-M1

03 Oct 18:06
v1.1.0-M1
Compare
Choose a tag to compare
1.1.0-M1 Pre-release
Pre-release

1.0.2

17 Sep 00:37
v1.0.2
Compare
Choose a tag to compare

This is a hotfix release for sbt 1.0.x series.

Bug fixes

  • Fixes terminal echo issue. #3507 by @kczulko
  • Fixes deliver task, and adds makeIvyXml 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 and bgRun not picking up changes to directories in the classpath. #3517 by @dwijnand
  • Fixes ++ so it won't change the value of crossScalaVersion. #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 in JavaNetAuthenticator when used in conjunction with repositories 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 new startServer command to manually start the server. by @eed3si9n

Internal

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

28 Aug 18:51
v1.0.1
Compare
Choose a tag to compare

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, respecting crossScalaVersions; 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 including Runtime configuration, by reimplementing run in terms of bgRun. #3477 by @eed3si9n
  • Shows actual as a potential option of inspect #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

#3438 by @Duhemm; #3478 and io#74 by @eed3si9n

1.0.0

10 Aug 21:31
v1.0.0
Compare
Choose a tag to compare

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) to withFoo(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 capitalized val, like val Xyz = config("xyz"). This captures the lhs identifier into the configuration so we can use it from the shell later.
  • Changes publishTo and otherResolvers from SettingKeys to TaskKeys. [#2059][2059]/[#2662][2662] by [@dwijnand][@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.
  • A number of the methods on 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.
  • sbt 1.0 renames Global as scope component to Zero to disambiguate from GlobalScope. [@eed3si9n][@eed3si9n]
  • sbt 1.0 uses ConfigRef in places where String was used to reference configuration, such as update.value.configuration(...). Pass in Configuration, which implicitly converts to ConfigRef.
  • Changes sourceArtifactTypes and docArtifactTypes from Set[String] to Seq[String] settings.
  • Renames early command feature from --<command> to early(<command>).
  • Drops sbt 0.12 style hyphen-separated key names (use publishLocal instead of publish-local).
  • Log options -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.
  • 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 and Build 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 because settings parameter does not work well with Auto Plugins. Use project 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 from Project (along with add/setSbtFiles).
  • Drops deprecated InputTask apply method and inputTask DSL method. Use Def.inputTask and Def.spaceDelimited().parsed.
  • Drops deprecated ProjectReference implicit lifts. Use RootProject(<uri>), RootProject(<file>) or LocalProject(<string>).
  • Drops deprecated seq(..) DSL method. Use Seq or pass in the settings without wrapping.
  • Drops deprecated File/Seq[File] setting enrichments. Use .value and Def.setting.
  • Drops deprecated SubProcess apply overload. Use SubProcess(ForkOptions(runJVMOptions = ..)).
  • Drops 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)

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

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 using scalas. [#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 to UpdateLogging.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 like inspect 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 abstracts PollingWatchService and Java NIO. [io#47][io47] by [@Duhemm][@Duhemm] on behalf of The Scala Center.
  • Adds variants of 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][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 ...

Read more

1.0.0-RC3

28 Jul 23:32
v1.0.0-RC3
Compare
Choose a tag to compare
1.0.0-RC3 Pre-release
Pre-release

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) to withFoo(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 and Build 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 because settings parameter does not work well with Auto Plugins. Use project 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 capitalized val, like val Tooling = config("tooling"). This captures the lhs identifier into the configuration so we can use it from the shell later.
  • Changes publishTo and otherResolvers from SettingKeys to TaskKeys. [#2059][2059]/[#2662][2662] by [@dwijnand][@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.
  • Drops sbt 0.12 style hyphen-separated key names (use publishLocal instead of publish-local).
  • Renames early command feature from --<command> to early(<command>).
  • Log options -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.
  • The scripted plugin is cross-versioned now, so you must use %% when depending on it
  • Removes the settingsSets method from Project (along with add/setSbtFiles).
  • Drops deprecated InputTask apply method and inputTask DSL method. Use Def.inputTask and Def.spaceDelimited().parsed.
  • Drops deprecated ProjectReference implicit lifts. Use RootProject(<uri>), RootProject(<file>) or LocalProject(<string>).
  • Drops deprecated seq(..) DSL method. Use Seq or pass in the settings without wrapping.
  • Drops deprecated File/Seq[File] setting enrichments. Use .value and Def.setting.
  • Drops deprecated SubProcess apply overload. Use SubProcess(ForkOptions(runJVMOptions = ..)).
  • Drops 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)
  • A number of the methods on 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.
  • sbt 1.0 renames Global as scope component to Zero to disambiguate from GlobalScope. [@eed3si9n][@eed3si9n]
  • sbt 1.0 uses ConfigRef in places where String was used to reference configuration, such as update.value.configuration(...). Pass in Configuration, which implicitly converts to ConfigRef.
  • Changes sourceArtifactTypes and docArtifactTypes from Set[String] to Seq[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

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 using scalas. [#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 to UpdateLogging.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 like inspect 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 abstracts PollingWatchService and Java NIO. [io#47][io47] by [@Duhemm][@Duhemm] on behalf of The Scala Center.
  • Adds variants of 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][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...
Read more

0.13.16

26 Jul 20:04
v0.13.16
Compare
Choose a tag to compare

Fixes with compatibility implications

  • Removes the "hit [ENTER] to switch to interactive mode" feature. Run sbt xxx shell to stay in shell after xxx. #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 for ModuleID and Artifact 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

#3133 by @eed3si9n

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

#3202 by @eed3si9n

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.

#3091/#3097/#3147 by @dwijnand

0.13.16-RC1

23 Jul 21:38
v0.13.16-RC1
Compare
Choose a tag to compare
0.13.16-RC1 Pre-release
Pre-release

Fixes with compatibility implications

  • Removes the "hit [ENTER] to switch to interactive mode" feature. Run sbt xxx shell to stay in shell after xxx. #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 for ModuleID and Artifact 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

#3133 by @eed3si9n

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

#3202 by @eed3si9n

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.

#3091/#3097/#3147 by @dwijnand

1.0.0-RC2

17 Jul 05:30
v1.0.0-RC2
Compare
Choose a tag to compare
1.0.0-RC2 Pre-release
Pre-release

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) to withFoo(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 and Build 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 because settings parameter does not work well with Auto Plugins. Use project 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 capitalized val, like val Tooling = config("tooling"). This captures the lhs identifier into the configuration so we can use it from the shell later.
  • Changes publishTo and otherResolvers from SettingKeys to TaskKeys. [#2059][2059]/[#2662][2662] by [@dwijnand][@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.
  • Drops sbt 0.12 style hyphen-separated key names (use publishLocal instead of publish-local).
  • Renames early command feature from --<command> to early(<command>).
  • Log options -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.
  • The scripted plugin is cross-versioned now, so you must use %% when depending on it
  • Removes the settingsSets method from Project (along with add/setSbtFiles).
  • Drops deprecated InputTask apply method and inputTask DSL method. Use Def.inputTask and Def.spaceDelimited().parsed.
  • Drops deprecated ProjectReference implicit lifts. Use RootProject(<uri>), RootProject(<file>) or LocalProject(<string>).
  • Drops deprecated seq(..) DSL method. Use Seq or pass in the settings without wrapping.
  • Drops deprecated File/Seq[File] setting enrichments. Use .value and Def.setting.
  • Drops deprecated SubProcess apply overload. Use SubProcess(ForkOptions(runJVMOptions = ..)).
  • Drops 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)
  • A number of the methods on 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.
  • sbt 1.0 renames Global as scope component to Zero to disambiguate from GlobalScope. [@eed3si9n][@eed3si9n]
  • sbt 1.0 uses ConfigRef in places where String was used to reference configuration, such as update.value.configuration(...). Pass in Configuration, which implicitly converts to ConfigRef.
  • Changes sourceArtifactTypes and docArtifactTypes from Set[String] to Seq[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

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 using scalas. [#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 to UpdateLogging.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 like inspect 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 abstracts PollingWatchService and Java NIO. [io#47][io47] by [@Duhemm][@Duhemm] on behalf of The Scala Center.
  • Adds variants of 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][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...

Read more

1.0.0-M6

30 May 19:07
v1.0.0-M6
Compare
Choose a tag to compare
1.0.0-M6 Pre-release
Pre-release

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 to Zero to disambiguate from GlobalScope. [@eed3si9n][@eed3si9n]

Fixes

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

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 and Build 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 because settings parameter does not work well with Auto Plugins. Use project 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) to withFoo(xxx).
  • Changes publishTo and otherResolvers 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 of publish-local).
  • Renames early command feature from --<command> to early(<command>).
  • Log options -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.
  • The scripted plugin is cross-versioned now, so you must use %% when depending on it
  • Removes the settingsSets method from Project (along with add/setSbtFiles).
  • Drops deprecated InputTask apply method and inputTask DSL method. Use Def.inputTask and Def.spaceDelimited().parsed.
  • Drops deprecated ProjectReference implicit lifts. Use RootProject(<uri>), RootProject(<file>) or LocalProject(<string>).
  • Drops deprecated seq(..) DSL method. Use Seq or pass in the settings without wrapping.
  • Drops deprecated File/Seq[File] setting enrichments. Use .value and Def.setting.
  • Drops deprecated SubProcess apply overload. Use SubProcess(ForkOptions(runJVMOptions = ..)).
  • Drops 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)
  • A number of the methods on 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.

Features

  • New incremental compiler called Zinc...
Read more

0.13.16-M1

28 Apr 03:36
v0.13.16-M1
Compare
Choose a tag to compare
0.13.16-M1 Pre-release
Pre-release

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

#3133 by @eed3si9n