Older Changes

0.11.3 to 0.12.0

0.11.2 to 0.11.3

The sbt group ID is changed to org.scala-sbt (from
org.scala-tools.sbt). This means you must use a 0.11.3 launcher to
launch 0.11.3.

The convenience objects ScalaToolsReleases and ScalaToolsSnapshots
now point to https://oss.sonatype.org/content/repositories/releases
and …/snapshots

The launcher no longer includes scala-tools.org repositories by
default and instead uses the Sonatype OSS snapshots repository for
Scala snapshots.

The scala-tools.org releases repository is no longer included as
an application repository by default. The Sonatype OSS repository is

not included by default in its place.

Other fixes:

Compiler interface works with 2.10

maxErrors setting is no longer ignored

Correct test count. gh-372 (Eugene)

Fix file descriptor leak in process library (Daniel)

Buffer url input stream returned by Using. gh-437

Jsch version bumped to 0.1.46. gh-403

JUnit test detection handles ancestors properly (Indrajit)

Avoid unnecessarily re-resolving plugins. gh-368

Substitute variables in explicit version strings and custom
repository definitions in launcher configuration

Support setting sbt.version from system property, which overrides
setting in a properties file. gh-354

Minor improvements to command/key suggestions

0.11.1 to 0.11.2

Notable behavior change:

The local Maven repository has been removed from the launcher’s list
of default repositories, which is used for obtaining sbt and Scala
dependencies. This is motivated by the high probability that
including this repository was causing the various problems some
users have with the launcher not finding some dependencies (gh-217).

Fixes:

gh-257 Fix invalid classifiers in pom generation (Indrajit)

gh-255 Fix scripted plugin descriptor (Artyom)

Fix forking git on windows (Stefan, Josh)

gh-261 Fix whitespace handling for semicolon-separated commands

gh-263 Fix handling of dependencies with an explicit URL

gh-272 Show deprecation message for project/plugins/

0.11.0 to 0.11.1

Breaking change:

The scripted plugin is now in the sbt package so that it can be
used from a named package

Notable behavior change:

By default, there is more logging during update: one line per
dependency resolved and two lines per dependency downloaded. This is
to address the appearance that sbt hangs on larger ‘update’s.

Fixes and improvements:

Show help for a key with help <key>

gh-21 Reduced memory and time overhead of incremental recompilation
with signature hash based approach.

Rotate global log so that only output since last prompt is displayed
for last

gh-169 Add support for exclusions with excludeAll and exclude
methods on ModuleID. (Indrajit)

gh-235 Checksums configurable for launcher

gh-246 Invalidate update when update is invalidated for an
internal project dependency

gh-138 Include plugin sources and docs in update-sbt-classifiers

gh-219 Add cleanupCommands setting to specify commands to run before
interpreter exits

Derive Java source file from name of class file when no SourceFile
attribute is present in the class file. Improves tracking when

g:none option is used.

Fix FileUtilities.unzip to be tail-recursive again.

0.7.2 to 0.7.3

Fixed issue with scala.library.jar not being on javac’s classpath

Fixed buffered logging for parallel execution

Fixed test-* tab completion being permanently set on first
completion

Works with Scala 2.8 trunk again.

Launcher: Maven local repository excluded when the Scala version is
a snapshot. This should fix issues with out of date Scala snapshots.

The compiler interface is precompiled against common Scala versions
(for this release, 2.7.7 and 2.8.0.Beta1).

Added PathFinder.distinct

Running multiple commands at once at the interactive prompt is now
supported. Prefix each command with ’;’.

Run and return the output of a process as a String with !! or as a
(blocking) Stream[String] with lines.

Java tests + Annotation detection

Test frameworks can now specify annotation fingerprints. Specify the
names of annotations and sbt discovers classes with the annotations
on it or one of its methods. Use version 0.5 of the test-interface.

Added Runner2, Fingerprint, AnnotationFingerprint, and
SubclassFingerprint to the test-interface. Existing test frameworks
should still work. Implement Runner2 to use fingerprints other than
SubclassFingerprint.

0.7.1 to 0.7.2

Process.apply no longer uses CommandParser. This should fix
issues with the android-plugin.

Added sbt.impl.Arguments for parsing a command like a normal
action (for Processors)

Arguments are passed to javac using an argument file (@)

Added webappUnmanaged: PathFinder method to DefaultWebProject.
Paths selected by this PathFinder will not be pruned by
prepare-webapp and will not be packaged by package. For example, to
exclude the GAE datastore directory:

0.7.0 to 0.7.1

Fixed Jetty 7 support to work with JRebel

Fixed make-pom to generate valid dependencies section

0.5.6 to 0.7.0

Unifed batch and interactive commands. All commands that can be
executed at interactive prompt can be run from the command line. To
run commands and then enter interactive prompt, make the last
command ‘shell’.

Properly track certain types of synthetic classes, such as for
comprehension with >30 clauses, during compilation.

Jetty 7 support

Allow launcher in the project root directory or the lib directory.
The jar name must have the form ‘sbt-launch.jar’ in order to be
excluded from the classpath.

Stack trace detail can be controlled with 'on', 'off', ‘nosbt’,
or an integer level. ‘nosbt’ means to show stack frames up to the
first sbt method. An integer level denotes the number of frames to
show for each cause. This feature is courtesy of Tony Sloane.

New action ‘test-run’ method that is analogous to ‘run’, but for
test classes.

New action ‘clean-plugins’ task that clears built plugins (useful
for plugin development).

Can provide commands from a file with new command: <filename

Can provide commands over loopback interface with new command: <port

Scala version handling has been completely redone.

The version of Scala used to run sbt (currently 2.7.7) is decoupled
from the version used to build the project.

Changing between Scala versions on the fly is done with the command:
++<version>

Cross-building is quicker. The project definition does not need to
be recompiled against each version in the cross-build anymore.

Scala versions are specified in a space-delimited list in the
build.scala.versions property.

Can provide custom task start and end delimiters by defining the
system properties sbt.start.delimiter and sbt.end.delimiter.

Revamped launcher that can launch Scala applications, not just sbt

Provide a configuration file to the launcher and it can download the
application and its dependencies from a repository and run it.

sbt’s configuration can be customized. For example,

The sbt version to use in projects can be fixed, instead of read
from project/build.properties.

The default values used to create a new project can be changed.

The repositories used to fetch sbt and its dependencies, including
Scala, can be configured.

The location sbt is retrieved to is configurable. For example,
/home/user/.ivy2/sbt/ could be used instead of project/boot/.

0.5.5 to 0.5.6

Support specs specifications defined as classes

Fix specs support for 1.6

Support ScalaTest 1.0

Support ScalaCheck 1.6

Remove remaining uses of structural types

0.5.4 to 0.5.5

Fixed problem with classifier support and the corresponding test

No longer need "->default" in configurations (automatically
mapped).

Can specify a specific nightly of Scala 2.8 to use (for example:
2.8.0-20090910.003346-+)

Experimental support for searching for project
(-Dsbt.boot.search=none | only | root-first | nearest)

Fix issue where last path component of local repository was dropped
if it did not exist.

Added support for configuring repositories on a per-module basis.

Unified batch-style and interactive-style commands. All commands
that were previously interactive-only should be available
batch-style. ‘reboot’ does not pick up changes to ‘scala.version’
properly, however.

0.5.2 to 0.5.4

Many logging related changes and fixes. Added FilterLogger and
cleaned up interaction between Logger, scripted testing, and the
builder projects. This included removing the recordingDepth hack
from Logger. Logger buffering is now enabled/disabled per thread.

Fix compileOptions being fixed after the first compile

Minor fixes to output directory checking

Added defaultLoggingLevel method for setting the initial level of
a project’s Logger

Allow multiple instances of Jetty (new jettyRunTasks can be
defined with different ports)

jettyRunTask accepts configuration in a single configuration
wrapper object instead of many parameters

Fix web application class loading (issue #35) by using
jettyClasspath=testClasspath—-jettyRunClasspath for loading Jetty.
A better way would be to have a jetty configuration and have
jettyClasspath=managedClasspath(’jetty’), but this maintains
compatibility.

Copy resources to target/resources and target/test-resources
using copyResources and copyTestResources tasks. Properly include
all resources in web applications and classpaths (issue #36).
mainResources and testResources are now the definitive methods for
getting resources.

Updated for 2.8 (sbt now compiles against September 11, 2009
nightly build of Scala)

reload command in scripted tests will now properly handle
success/failure

Very basic support for Java sources: Java sources under
src/main/java and src/test/java will be compiled.

parallelExecution defaults to value in parent project if there is
one.

Added ‘console-project’ that enters the Scala interpreter with the
current Project bound to the variable project.

The default Ivy cache manager is now configured with useOrigin=true
so that it doesn’t cache artifacts from the local filesystem.

For users building from trunk, if a project specifies a version of
sbt that ends in -SNAPSHOT, the loader will update sbt every time it
starts up. The trunk version of sbt will always end in -SNAPSHOT
now.

Added automatic detection of classes with main methods for use when
mainClass is not explicitly specified in the project definition. If
exactly one main class is detected, it is used for run and package.
If multiple main classes are detected, the user is prompted for
which one to use for run. For package, no Main-Class attribute is
automatically added and a warning is printed.

Updated build to cross-compile against Scala 2.7.4.

Fixed proguard task in sbt’s project definition

Added manifestClassPath method that accepts the value for the
Class-Path attribute

Added PackageOption called ManifestAttributes that accepts
(java.util.jar.Attributes.Name, String) or (String, String) pairs
and adds them to the main manifest attributes

Fixed some situations where characters would not be echoed at
prompts other than main prompt.

Interactive tasks must be executed directly on the project on which
they are defined

Method tasks accept input arguments (Array[String]) and
dynamically create the task to run

Tasks can depend on tasks in other projects

Tasks are run in parallel breadth-first style

Added test-only method task, which restricts the tests to run to
only those passed as arguments.

Added test-failed method task, which restricts the tests to run.
First, only tests passed as arguments are run. If no tests are
passed, no filtering is done. Then, only tests that failed the
previous run are run.

Added test-quick method task, which restricts the tests to run.
First, only tests passed as arguments are run. If no tests are
passed, no filtering is done. Then, only tests that failed the
previous run or had a dependency change are run.

Added launcher that allows declaring version of sbt/scala to build
project with.

Added tab completion with ~

Added basic tab completion for method tasks, including test-*

Changed default pack options to be the default options of
Pack200.Packer

Fixed ~ behavior when action doesn’t exist

0.3.6 to 0.3.7

Improved classpath methods

Refactored various features into separate project traits

ParentProject can now specify dependencies

Support for optional scope

More API documentation

Test resource paths provided on classpath for testing

Added some missing read methods in FileUtilities

Added scripted test framework

Change detection using hashes of files

Fixed problem with manifests not being generated (bug #14)

Fixed issue with scala-tools repository not being included by
default (again)

Added option to set ivy cache location (mainly for testing)

trace is no longer a logging level but a flag enabling/disabling
stack traces

Project.loadProject and related methods now accept a Logger to use

Made hidden files and files that start with '.' excluded by
default ('.*' is required because Subversion seems to not mark .svn
directories hidden on Windows)

Implemented exit codes

Added continuous compilation command cc

0.3.5 to 0.3.6

Fixed bug #12.

Compiled with 2.7.2.

0.3.2 to 0.3.5

Fixed bug #11.

Fixed problem with dependencies where source jars would be used
instead of binary jars.

Fixed scala-tools not being used by default for inline
configurations.

0.1.6 to 0.1.7

Redesigned Path properly, including PathFinder returning a
Set[Path] now instead of Iterable[Path].

Moved paths out of ScalaProject and into BasicProjectPaths to
keep path definitions separate from task definitions.

Added initial support for managing third-party libraries through the
update task, which must be explicitly called (it is not a dependency
of compile or any other task). This is experimental, undocumented,
and known to be incomplete.

Parallel execution implementation at the project level, disabled by
default. To enable, add:
scala override def parallelExecution = true to your project
definition. In order for logging to make sense, all project logging
is buffered until the project is finished executing. Still to be
done is some sort of notification of project execution (which ones
are currently executing, how many remain)

run and console are now specified as “interactive” actions,
which means they are only executed on the project in which they are
defined when called directly, and not on all dependencies. Their
dependencies are still run on dependent projects.

Generalized conditional tasks a bit. Of note is that analysis is no
longer required to be in metadata/analysis, but is now in
target/analysis by default.

Message now displayed when project definition is recompiled on
startup

Project no longer inherits from Logger, but now has a log member.

Dependencies passed to project are checked for null (may help with
errors related to initialization/circular dependencies)

Task dependencies are checked for null

Projects in a multi-project configuration are checked to ensure that
output paths are different (check can be disabled)

Made update task globally synchronized because Ivy is not
thread-safe.

Can change to a project in an interactive session to work only on
that project (and its dependencies)

External dependency handling

Tracks non-source dependencies (compiled classes and jars)

Requires each class to be provided by exactly one classpath element
(This means you cannot have two versions of the same class on the
classpath, e.g. from two versions of a library)

Changes in a project propagate the right source recompilations in
dependent projects

Consequences:

Recompilation when changing java/scala version

Recompilation when upgrading libraries (again, as indicated in the
second point, situations where you have library-1.0.jar and
library-2.0.jar on the classpath at the same time are not handled
predictably. Replacing library-1.0.jar with library-2.0.jar should
work as expected.)