sbt/notes/0.13.9.markdown

9.2 KiB

Fixes with compatibility implications

  • Starting 0.13.9, crossScalaVersions default value is fixed back to the older 0.12.x behavior. See below for details.
  • Starting 0.13.9, the generated POM files no longer include dependencies on source or javadoc jars obtained via withSources() or withJavadoc(). See below for details.
  • Scala version is bumped to 2.10.5. This brings in the fix for SI-9027: XML node sequence literal bug. #1666/#2068 by @eed3si9n
  • Change launcher configuration so JCenter is looked at first before all other external repositories. #1938

Improvements

  • Adds retrieveManaged related improvements. See below for details.
  • Adds -= and --= for settings and tasks, which are the opposites of += and ++=. #1922 by @dwijnand
  • Adds inThisBuild, similar to inConfig, to allow specifying multiple settings in ThisBuild scope. #1847/#1989 by @dwijnand
  • Adds a nicer toString to SimpleCommand to make it more human-friendly. #1998/#2000 by @dwijnand
  • Adds forceUpdatePeriod key, that takes values of Option[FiniteDuration]. If set, a full update will occur after that amount of time without needing to explicitly run the update task. By @ajsquared
  • Updates ForkError.getMessage() to include exception's original name. #2028 by @kamilkloch
  • Adds help message for inspect actual. #1651/#1990 by @dwijnand
  • Supports excluding tests in testOnly/testQuick with -, for example -MySpec. #1970 by @matthewfarwell
  • Adds more diagnostic info for undefined settings. #2008/#2009 by @DavidPerezIngeniero
  • Adds an Extracted.runInputTask helper to assist with imperatively executing input tasks. #2006 by @jroper
  • Renames distinct method on PathFinder to distinctName. #1973 by @eed3si9n
  • Adds distinctPath method on PathFinder. #1973 by @eed3si9n

Bug fixes

  • Fixes memory/performance/correctness issue with cached resolution. See below.
  • Correct incremental compile debug message for invalidated products #1961 by @jroper
  • Enables forced GC by default. See below.
  • Fixes Maven compatibility to read maven-metadata.xml. See below.
  • Captures errors on help command. #1900/#1940 by @DavidPerezIngeniero
  • Prevents history command(s) from going into an infinite loop #1562 by @PanAeon
  • Honors overwrite flag when publishing locally. #1960 by @asflierl
  • Fixes a certain class of pom corruption that can occur in the presence of parent-poms. #1856 by @jsuereth
  • Adds dependency-level exclusions in the POM for project-level exclusions. #1877/#2035 by @dwijnand

crossScalaVersions default value

As of this fix crossScalaVersions returns to the behaviour present in 0.12.4 whereby it defaults to what scalaVersion is set to, for example if scalaVersion is set to "2.11.6", crossScalaVersions now defaults to Seq("2.11.6").

Therefore when upgrading from any version between 0.13.0 and 0.13.8 be aware of this new default if your build setup depended on it.

#1828/#1992 by @dwijnand

POM files no longer include certain source and javadoc jars

When declaring library dependencies using the withSources() or withJavadoc() options, sbt was also including in the pom file, as dependencies, the source or javadoc jars using the default Maven scope. Such dependencies might be erroneously processed as they were regular jars by automated tools

#2001/#2027 by @cunei

sbt 0.13.9 adds retrieveManagedSync key that, when set to true, enables synchronizing retrieved to the current build by removed unneeded files.

It also adds configurationsToRetrieve key, that takes values of Option[Set[Configuration]]. If set, when retrieveManaged is true only artifacts in the specified configurations will be retrieved to the current build.

#1950/#1987 by @ajsquared

Cached resolution fixes

On a larger dependency graph, the JSON file growing to be 100MB+ with 97% of taken up by caller information. To make the matter worse, these large JSON files were never cleaned up.

sbt 0.13.9 filters out artificial or duplicate callers, which fixes OutOfMemoryException seen on some builds. This generally shrinks the size of JSON, so it should make the IO operations faster. Dynamic graphs will be rotated with directories named after yyyy-mm-dd, and stale JSON files will be cleaned up after few days.

sbt 0.13.9 also fixes a correctness issue that was found in the earlier releases. Under some circumstances, libraries that shouldn't have been evicted was being evicted. This occurred when library A1 depended on B2, but a newer A2 dropped the dependency, and A2 and B1 are also is in the graph. This is fixed by sorting the graph prior to eviction.

#2030/#1721/#2014/#2046/#2097/#2129 by @eed3si9n

Force GC

@cunei in #1223 discovered that sbt leaks PermGen when it creates classloaders to call Scala Compilers. sbt 0.13.9 will call GC on a set interval (default: 60s). It will also call GC right before cross building. This behavior can disabled using by setting false to forcegc setting or sbt.task.forcegc flag.

#1773 by @eed3si9n

Maven compatibility fix

To resolve dynamic versions such as SNAPSHOT and version ranges, the dependency resolution engine queries for the list of available versions. For Maven repositories, it was supposed read maven-metadata.xml first, but because sbt customizes the repository layout for cross building, it has been falling back to screen scraping of the Apache directory listing. This problem surfaced as:

  • Version range not working for artifacts hosted on Bintray. #2005
  • Potentially other SNAPSHOT related issues.

sbt 0.13.9 fixes this by relaxing the Maven compatibility check, so it will read maven-metadata.xml. #2075 by @eed3si9n

Contributors

Special thanks to the contributors for making this release a success. Compared to 0.13.8, there were 127 (non-merge) commits, by 14 contributors: Eugene Yokota, Dale Wijnand, Josh Suereth, Andrew Johnson, David Perez, Matthew Farwell, Antonio Cunei, Andrzej Jozwik, James Roper, Vitalii Voloshyn, Benjy, Kamil Kloch, Max Worgan, Andreas Flierl. Thank you!