7.5 KiB
Fixes with compatibility implications
- Deprecates the old sbt 0.12 DSL, 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 - Improve
showwhen key returns aSeqby 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
newcommand andtemplateResolverInfos. 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
.jvmoptssupport to the launcher script. sbt/sbt-launcher-package#111 by @fommil - Adds
.java-versionsupport to the Windows launcher script. sbt/sbt-launcher-package#111 by @fommil - The startup log level is dropped to
-errorin script mode usingscalas. #840/#2746 by @eed3si9n - Adds
CrossVersion.patchwhich sits in betweenCrossVersion.binaryandCrossVersion.fullin that it strips off any trailing-bin-...suffix which is used to distinguish variant but binary compatible Scala toolchain builds. Most things which are currentlyCrossVersion.full(eg. Scala compiler plugins, esp. macro-paradise) would be more appropriately depended on asCrossVersion.patchfrom this release on.
Bug fixes
- Fixes a regression in sbt 0.13.12 that wrongly reports build-level keys to be ambiguous. #2707/#2708 by @Duhemm
- Fixes a regression in sbt 0.13.12 that was misfiring Scala version enforcement when an alternative
scalaOrganizationis set. #2703 by @milessabin - Fixes
Tags.ForkedTestGroup. #2677/#2681 by @pauldraper - Fixes forked tests being reported as successful when the test harness fails. #2442/#2722/#2730 by @eed3si9n/@dwijnand
- Fixes incorrect installation path on Windows. sbt/sbt-launcher-package#110 by @dwijnand
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.
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.