5.0 KiB
Fixes with compatibility implications
- Deprecates the old symbolic operators, to be removed in sbt 1.0. See below for more details.
- The
.valuemethod is deprecated for input tasks. Calling.valueon an input key returns anInputTask[A], which is completely unintuitive and often results in a bug. In most cases.evaluatedshould be called, which returnsAby evaluating the task. Just in caseInputTask[A]is needed,.inputTaskValuemethod is now provided. #2709 by @eed3si9n - sbt 0.13.13 renames the early command
--<command>that was added in 0.13.1 toearly(<command>). This fixes the regression #1041. For backward compatibility--error,--warn,--info, and--debugwill 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
Improvements
- Adds
newcommand andtemplateResolvers. 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
Bug fixes
- Fixes a regression in sbt 0.13.12 that wrongly reports build-level keys to be ambiguous. #2707/#2708 by @Duhemm
- Fixes forked tests being reported as successful when the test harness fails. #2442/#2722/#2730 by @eed3si9n/@dwijnand
new command and templateResolvers
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,
which evaluates the arguments passed to the command to find and run a template.
As a reference implementation Giter8 is provided. For instance:
sbt new eed3si9n/hello.g8
will run eed3si9n/hello.g8 using Giter8.
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 operators
The no-longer-documented operators <<=, <+=, and <++= are deprecated,
and will be removed in sbt 1.0.
For <<=, the suggested migration would be to use either := or ~= operators.
The RHS of <<= takes an Initialize[_] expression, which can be converted to := style
by wrapping the expression in parenthesis, and calling .value at the end.
For example:
key := (key.dependsOn(compile in Test)).value
For <+= and <++=, use += { x.value } and ++= { x.value }.