Skip to content

0.13.13

Compare
Choose a tag to compare
@dwijnand dwijnand released this 28 Oct 12:27
· 7664 commits to 1.10.x since this release
v0.13.13
673e89d

Fixes with compatibility implications

  • Deprecates the old sbt 0.12 DSL, to be removed in sbt 1.0. See below for more details.
  • The .value method is deprecated for input tasks. Calling .value on an input key returns an InputTask[A],
    which is completely unintuitive and often results in a bug. In most cases .evaluated should be called,
    which returns A by evaluating the task.
    Just in case InputTask[A] is needed, .inputTaskValue method is now provided. #2709 by @eed3si9n
  • sbt 0.13.13 renames the early command --<command> that was added in 0.13.1 to early(<command>). This fixes the regression #1041. For backward compatibility --error, --warn, --info, and --debug will continue to function during the 0.13 series, but it is strongly encouraged to migrate to the single hyphen options: -error, -warn, -info, and -debug. #2742 by @eed3si9n
  • Improve show when key returns a Seq by showing the elements one per line. Disable with -Dsbt.disable.show.seq=true. #2755 by @eed3si9n
  • Recycles classloaders to be anti-hostile to JIT. Disable with -Dsbt.disable.interface.classloader.cache=true. #2754 by @retronym

Improvements

  • Adds new command and templateResolverInfos. See below for more details.
  • Auto plugins can add synthetic subprojects. See below for more details.
  • Supports wildcard exclusions in POMs #1431/sbt/ivy#22/#2731 by @jtgrabowski
  • Adds the ability to call aggregateProjects(..) for the current project inside a build sbt file. #2682 by @xuwei-k
  • Adds .jvmopts support to the launcher script. sbt/sbt-launcher-package#111 by @fommil
  • Adds .java-version support to the Windows launcher script. sbt/sbt-launcher-package#111 by @fommil
  • The startup log level is dropped to -error in script mode using scalas. #840/#2746 by @eed3si9n
  • Adds CrossVersion.patch which sits in between CrossVersion.binary and CrossVersion.full in that it strips off any
    trailing -bin-... suffix which is used to distinguish variant but binary compatible Scala toolchain builds. Most things
    which are currently CrossVersion.full (eg. Scala compiler plugins, esp. macro-paradise) would be more appropriately
    depended on as CrossVersion.patch from this release on.

Bug fixes

new command and templateResolverInfos

sbt 0.13.13 adds a new command, which helps create new build definitions.
The new command is extensible via a mechanism called the template resolver.
A template resolver pattern matches on the passed in arguments after new,
and if it's a match it will apply the template.

As a reference implementation, template resolver for Giter8 is provided. For instance:

sbt new eed3si9n/hello.g8

will run eed3si9n/hello.g8 using Giter8.

#2705 by @eed3si9n

Synthetic subprojects

sbt 0.13.13 adds support for AutoPlugins to define subprojects programmatically,
by overriding the extraProjects method:

import sbt._, Keys._

object ExtraProjectsPlugin extends AutoPlugin {
  override def extraProjects: Seq[Project] =
    List("foo", "bar", "baz") map generateProject

  def generateProject(id: String): Project =
    Project(id, file(id)).
      settings(
        name := id
      )
}

In addition, subprojects may be derived from an existing subproject
by overriding derivedProjects:

import sbt._, Keys._

object DerivedProjectsPlugin extends AutoPlugin {
  // Enable this plugin by default
  override def requires: Plugins = sbt.plugins.CorePlugin
  override def trigger = allRequirements

  override def derivedProjects(proj: ProjectDefinition[_]): Seq[Project] =
    // Make sure to exclude project extras to avoid recursive generation
    if (proj.projectOrigin != ProjectOrigin.DerivedProject) {
      val id = proj.id + "1"
      Seq(
        Project(id, file(id)).
          enablePlugins(DatabasePlugin)
      )
    }
    else Nil
}

#2532/#2717/#2738 by @eed3si9n

Deprecate old sbt 0.12 DSL

The no-longer-documented operators <<=, <+=, and <++= and tuple enrichments are deprecated,
and will be removed in sbt 1.0.

Generally,

task3 <<= (task1, task2) map { (t1, t2) => println(t1 + t2); t1 + t2 }

should migrate to

task3 := {
  println(task1.value + task2.value)
  task1.value + task2.value
}

Except for source generators, which requires task values:

sourceGenerators in Compile <+= buildInfo

This becomes:

sourceGenerators in Compile += buildInfo.taskValue

Another exception is input task:

run <<= docsRunSetting

This becomes:

run := docsRunSetting.evaluated

See Migrating from sbt 0.12.x for more details.

#2716/#2763/#2764 by @eed3si9n and @dwijnand

Notes

No changes should be necessary to your project definition and all plugins published for sbt 0.13.{x|x<12} should still work.

Special thanks to the contributors for making this release a success. According to git shortlog -sn --no-merges v0.13.12..v0.13.13, compared to 0.13.12, there were 63 (non-merge) commits, by 9 contributors: Eugene Yokota, Dale Wijnand, Martin Duhem, Miles Sabin, Jaroslaw Grabowski, Kenji Yoshida, Jason Zaugg, Paul Draper, Björn Antonsson. Thank you!