Older Changes
0.11.3 to 0.12.0
The changes for 0.12.0 are listed on a separate page. See
sbt 0.12.0 changes.
0.11.2 to 0.11.3
Dropping scala-tools.org:
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
- gh-46 Fix regression in caching missing classifiers for
update-classifiers and update-sbt-classifiers.
- gh-228 Set
connectInput to true to connect standard input to
forked run
- gh-229 Limited task execution interruption using ctrl+c
- gh-220 Properly record source dependencies from separate compilation
runs in the same step.
- gh-214 Better default behavior for classpathConfiguration for
external Ivy files
- gh-212 Fix transitive plugin dependencies.
- gh-222 Generate section in make-pom. (Jan)
- Build resolvers, loaders, and transformers.
- Allow project dependencies to be modified by a setting
(buildDependencies) but with the restriction that new builds cannot
be introduced.
- gh-174, gh-196, gh-201, gh-204, gh-207, gh-208, gh-226, gh-224,
gh-253
0.10.1 to 0.11.0
Major Improvements:
- Move to 2.9.1 for project definitions and plugins
- Drop support for 2.7
- Settings overhaul, mainly to make API documentation more usable
- Support using native libraries in
run and test (but not console,
for example)
Automatic plugin cross-versioning. Use
addSbtPlugin("group" % "name" % "version")
in project/plugins.sbt instead of libraryDependencies += ... See
[Plugins][Plugins] for details
Fixes and Improvements:
- Display all undefined settings at once, instead of only the first
one
- Deprecate separate
classpathFilter, defaultExcludes, and
sourceFilter keys in favor of includeFilter and excludeFilter
explicitly scoped by unmanagedSources, unmanagedResources, or
unmanagedJars as appropriate (Indrajit)
- Default to using shared boot directory in
~/.sbt/boot/
- Can put contents of
project/plugins/ directly in project/
instead. Will likely deprecate plugins/ directory
- Key display is context sensitive. For example, in a single project,
the build and project axes will not be displayed
- gh-114, gh-118, gh-121, gh-132, gh-135, gh-157: Various settings and
error message improvements
- gh-115: Support configuring checksums separately for
publish and
update
- gh-118: Add
about command
- gh-118, gh-131: Improve
last command. Aggregate last <task> and
display all recent output for last
- gh-120: Support read-only external file projects (Fred)
- gh-128: Add
skip setting to override recompilation change
detection
- gh-139: Improvements to pom generation (Indrajit)
- gh-140, gh-145: Add standard manifest attributes to binary and
source jars (Indrajit)
- Allow sources used for
doc generation to be different from sources
for compile
- gh-156: Made
package an alias for package-bin
- gh-162: handling of optional dependencies in pom generation
0.10.0 to 0.10.1
Some of the more visible changes:
- Support “provided” as a valid configuration for inter-project
dependencies gh-53
- Try out some better error messages for build.sbt in a few common
situations gh-58
- Drop “Incomplete tasks …” line from error messages. gh-32
- Better handling of javac logging. gc-74
- Warn when reload discards session settings
- Cache failing classifiers, making ‘update-classifiers’ a practical
replacement for withSources()
- Global settings may be provided in
~/.sbt/build.sbt gh-52
- No need to define
"sbtPlugin := true" in project/plugins/ or
~/.sbt/plugins/
- Provide statistics and list of evicted modules in UpdateReport
- Scope use of ‘transitive-classifiers’ by ‘update-sbt-classifiers’
and ‘update-classifiers’ for separate configuration.
- Default project ID includes a hash of base directory to avoid
collisions in simple cases.
- ’extra-loggers’ setting to make it easier to add loggers
- Associate ModuleID, Artifact and Configuration with a classpath
entry (moduleID, artifact, and configuration keys). gh-41
- Put httpclient on Ivy’s classpath, which seems to speed up ‘update’.
0.7.7 to 0.10.0
Major redesign, only prominent changes listed.
- Project definitions in Scala 2.8.1
- New configuration system: See .sbt build example,
.scala build defnition and .sbt build definition.
- New task engine: Tasks
- New multiple project support: .scala build defnition
- More aggressive incremental recompilation for both Java and Scala
sources
- Merged plugins and processors into improved plugins system:
Plugins
- Web application
and webstart support moved to plugins instead of core features
- Fixed all of the issues in (Google Code) issue #44
- Managed dependencies automatically updated when configuration
changes
update-sbt-classifiers and update-classifiers tasks for
retrieving sources and/or javadocs for dependencies, transitively
- Improved [artifact handling and configuration][Attifacts]
- Tab completion parser combinators for commands and input tasks:
Commands
- No project creation prompts anymore
- Moved to GitHub: https://github.com/harrah/xsbt
0.7.5 to 0.7.7
- Workaround for Scala issue
#4426
- Fix issue 156
0.7.4 to 0.7.5
- Joonas’s update to work with Jetty 7.1 logging API changes.
- Updated to work with Jetty 7.2 WebAppClassLoader binary
incompatibility (issue 129).
- Provide application and boot classpaths to tests and ‘run’ning code
according to https://gist.github.com/404272
- Fix
provided configuration. It is no longer included on the
classpath of dependent projects.
- Scala 2.8.1 is the default version used when starting a new project.
- Updated to
Ivy 2.2.0.
- Trond’s patches that allow configuring
jetty-env.xml and
webdefault.xml
- Doug’s patch to
make ‘projects’ command show an asterisk next to current project
- Fixed issue 122
- Implemented issue 118
- Patch from Viktor and Ross for issue 123
- (RC1) Patch from Jorge for issue 100
- (RC1) Fix
<packaging> type
0.7.3 to 0.7.4
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.
- Detect subclasses and annotations in Java sources (really, their
class files)
- Discovered is new root of hierarchy representing discovered
subclasses + annotations. TestDefinition no longer fulfills this
role.
TestDefinition is modified to be name+Fingerprint and represents
a runnable test. It need not be Discovered, but could be file-based
in the future, for example.
- Replaced testDefinitionClassNames method with
fingerprints in
CompileConfiguration.
- Added foundAnnotation to
AnalysisCallback
- 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:
override def webappUnmanaged = (temporaryWarPath / "WEB-INF" / "appengine-generated" ***)
- Added some String generation methods to
PathFinder: toString for
debugging and absString and relativeString for joining the absolute
(relative) paths by the platform separator.
- Made tab completors lazier to reduce startup time.
- Fixed
console-project for custom subprojects
Processor split into Processor/BasicProcessor. Processor
provides high level of integration with command processing.
BasicProcessor operates on a Project but does not affect command
processing.
- Can now use
Launcher externally, including launching sbt outside
of the official jar. This means a Project can now be created from
tests.
- Works with Scala 2.8 trunk
- Fixed logging level behavior on subprojects.
- All sbt code is now at https://github.com/harrah/xsbt in one
project.
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 courtesty 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.
- Dependency management:
make-pom task now uses custom pom generation code instead of Ivy’s
pom writer.
- Basic support for writing out Maven-style repositories to the pom
- Override the ‘pomExtra’ method to provide XML (
scala.xml.NodeSeq)
to insert directly into the generated pom.
- Complete control over repositories is now possible by overriding
ivyRepositories.
- The interface to Ivy can be used directly.
- Test framework support is now done through a uniform test interface.
Implications:
- New versions of specs, ScalaCheck, and ScalaTest are supported as
soon as they are released.
- Support is better, since the test framework authors provide the
implementation.
- Arguments can be passed to the test framework. For example: {{{ >
test-only your.test — -a -b -c }}}
- 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
- Cleaned up internal approach to adding extra default configurations
like plugin
- Added
syncPathsTask for synchronizing paths to a target directory
- 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)
- Fixed issue with position of
^ in compile errors
- Changed order of repositories (local, shared, Maven Central, user,
Scala Tools)
- Added Maven Central to resolvers used to find Scala library/compiler
in launcher
- Fixed problem that prevented detecting user-specified subclasses
- Fixed exit code returned when exception thrown in main thread for
TrapExit
Added javap task to DefaultProject. It has tab completion on
compiled project classes and the run classpath is passed to javap so
that library classes are available. Examples: :
> javap your.Clazz
> javap -c scala.List
Added exec task. Mixin Exec to project definition to use. This
forks the command following exec. Examples: :
> exec echo Hi
> exec find src/main/scala -iname *.scala -exec wc -l {} ;
Added sh task for users with a unix-style shell available (runs
/bin/sh -c <arguments>). Mixin Exec to project definition to use.
Example: :
> sh find src/main/scala -iname *.scala | xargs cat | wc -l
- Proper dependency graph actions (previously was an unsupported
prototype): graph-src and graph-pkg for source dependency graph and
quasi-package dependency graph (based on source directories and
source dependencies)
- Improved Ivy-related code to not load unnecessary default settings
- Fixed issue #39 (sources were not relative in src package)
- Implemented issue #38 (
InstallProject with ‘install’ task)
- Vesa’s patch for configuring the output of forked Scala/Java and
processes
- Don’t buffer logging of forked
run by default
- Check
Project.terminateWatch to determine if triggered execution
should stop for a given keypress.
- Terminate triggered execution only on ‘enter’ by default
(previously, any keypress stopped it)
- Fixed issue #41 (parent project should not declare jar artifact)
- Fixed issue #42 (search parent directories for
ivysettings.xml)
Added support for extra attributes with Ivy. Use
extra(key -> value) on ModuleIDs and Artifacts. To define for a
project’s ID: :
override def projectID = super.projectID extra(key -> value)
To specify in a dependency: :
val dep = normalID extra(key -> value)
0.5.1 to 0.5.2
- Fixed problem where dependencies of
sbt plugins were not on the
compile classpath
- Added
execTask that runs an sbt.ProcessBuilder when invoked
- Added implicit conversion from
scala.xml.Elem to
sbt.ProcessBuilder that takes the element’s text content, trims it,
and splits it around whitespace to obtain the command.
- Processes can now redirect standard input (see run with Boolean
argument or
!< operator on ProcessBuilder), off by default
- Made scripted framework a plugin and scripted tests now go in
src/sbt-test by default
- Can define and use an sbt test framework extension in a project
- Fixed
run action swallowing exceptions
- Fixed tab completion for method tasks for multi-project builds
- Check that tasks in
compoundTask do not reference static tasks
- Make
toString of Paths in subprojects relative to root project
directory
crossScalaVersions is now inherited from parent if not specified
- Added
scala-library.jar to the javac classpath
- Project dependencies are added to published
ivy.xml
- Added dependency tracking for Java sources using classfile parsing
(with the usual limitations)
Added Process.cat that will send contents of URLs and Files to
standard output. Alternatively, cat can be used on a single URL or
File. Example: :
import java.net.URL
import java.io.File
val spde = new URL("http://technically.us/spde/About")
val dispatch = new URL("http://databinder.net/dispatch/About")
val build = new File("project/build.properties")
cat(spde, dispatch, build) #| "grep -i scala" !
0.4.6 to 0.5/0.5.1
- Fixed
ScalaTest framework dropping stack traces
- Publish only public configurations by default
- Loader now adds
.m2/repository for downloading Scala jars
- Can now fork the compiler and runner and the runner can use a
different working directory.
- Maximum compiler errors shown is now configurable
- Fixed rebuilding and republishing released versions of
sbt against
new Scala versions (attempt #2)
- Fixed snapshot reversion handling (Ivy needs changing pattern set on
cache, apparently)
- Fixed handling of default configuration when useMavenConfiguration
is true
- Cleanup on Environment, Analysis, Conditional,
MapUtilities, and
more…
- Tests for Environment, source dependencies, library dependency
management, and more…
- Dependency management and multiple Scala versions
- Experimental plugin for producing project bootstrapper in a
self-extracting jar
- Added ability to directly specify
URL to use for dependency with
the from(url: URL) method defined on ModuleID
- Fixed issue #30
- Support cross-building with
+ when running batch actions
- Additional flattening for project definitions: sources can go either
in project/build/src (recursively) or project/build (flat)
- Fixed manual
reboot not changing the version of Scala when it is
manually set
- Fixed tab completion for cross-building
- Fixed a class loading issue with web applications
0.4.5 to 0.4.6
- Publishing to ssh/sftp/filesystem repository supported
- Exception traces are printed by default
- Fixed warning message about no
Class-Path attribute from showing
up for run
- Fixed
package-project operation
- Fixed
Path.fromFile
- Fixed issue with external process output being lost when sent to a
BufferedLogger with parallelExecution enabled.
- Preserve history across
clean
- Fixed issue with making relative path in jar with wrong separator
- Added cross-build functionality (prefix action with
+).
- Added methods
scalaLibraryJar and scalaCompilerJar to
FileUtilities
- Include project dependencies for
deliver/publish
- Add Scala dependencies for
make-pom/deliver/publish, which
requires these to depend on package
- Properly add compiler jar to run/test classpaths when main sources
depend on it
TestFramework root ClassLoader filters compiler classes used by
sbt, which is required for projects using the compiler.
- Better access to dependencies:
mainDependencies and testDependencies provide an analysis of the
dependencies of your code as determined during compilation
scalaJars is deprecated, use mainDependencies.scalaJars instead
(provides a PathFinder, which is generally more useful)
- Added
jettyPort method to DefaultWebProject.
- Fixed
package-project to exclude project/boot and
project/build/target
- Support specs 1.5.0 for Scala 2.7.4 version.
- Parallelization at the subtask level
- Parallel test execution at the suite/specification level.
0.4.3 to 0.4.5
- Sorted out repository situation in loader
- Added support for
http_proxy environment variable
- Added
download method from Nathan to FileUtilities to retrieve
the contents of a URL.
- Added special support for compiler plugins, see
compiler plugins support page.
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.
- Fixed issue #20 (use
http_proxy environment variable)
- Implemented issue #21 (native process wrapper)
- Fixed issue #22 (rebuilding and republishing released versions of
sbt against new Scala versions, specifically Scala 2.7.4)
- Implemented issue #23 (inherit inline repositories declared in
parent project)
0.4 to 0.4.3
- Direct dependencies on Scala libraries are checked for version
equality with scala.version
- Transitive dependencies on
scala-library and scala-compiler are
filtered
- They are fixed by
scala.version and provided on the classpath by
sbt
- To access them, use the
scalaJars method,
classOf[ScalaObject].getProtectionDomain.getCodeSource, or
mainCompileConditional.analysis.allExternals
- The configurations checked/filtered as described above are
configurable. Nonstandard configurations are not checked by default.
- Version of
sbt and Scala printed on startup
- Launcher asks if you want to try a different version if
sbt or
Scala could not be retrieved.
- After changing
scala.version or sbt.version with set, note is
printed that reboot is required.
- Moved managed dependency actions to
BasicManagedProject (update is
now available on ParentProject)
- Cleaned up
sbt’s build so that you just need to do update and
full-build to build from source. The trunk version of sbt will be
available for use from the loader.
- The loader is now a subproject.
- For development, you’ll still want the usual actions (such as
package) for the main builder and proguard to build the loader.
- Fixed analysis plugin improperly including traits/abstract classes
in subclass search
ScalaProjects already had everything required to be parent
projects: flipped the switch to enable it
- Proper method task support in scripted tests (
package group tests
rightly pass again)
- Improved tests in loader that check that all necessary libraries
were downloaded properly
0.3.7 to 0.4
- Fixed issue with
build.properties being unnecessarily updated in
sub-projects when loading.
- Added method to compute the SHA-1 hash of a
String
- Added pack200 methods
- Added initial process interface
- Added initial webstart support
- Added gzip methods
- Added
sleep and newer commands to scripted testing.
- Scripted tests now test the version of
sbt being built instead of
the version doing the building.
testResources is put on the test classpath instead of
testResourcesPath
- Added
jetty-restart, which does jetty-stop and then jetty-run
- Added automatic reloading of default web application
- Changed packaging behaviors (still likely to change)
- Inline configurations now allowed (can be used with configurations
in inline XML)
- Split out some code related to managed dependencies from
BasicScalaProject to new class BasicManagedProject
- Can specify that maven-like configurations should be automatically
declared
- Fixed problem with nested modules being detected as tests
testResources, integrationTestResources, and mainResources
should now be added to appropriate classpaths
- Added project organization as a property that defaults to inheriting
from the parent project.
- Project creation now prompts for the organization.
- Added method tasks, which are top-level actions with parameters.
- Made
help, actions, and methods commands available to
batch-style invocation.
- Applied Mikko’s two fixes for webstart and fixed problem with
pack200+sign. Also, fixed nonstandard behavior when gzip enabled.
- Added
control method to Logger for action lifecycle logging
- Made standard logging level convenience methods final
- Made
BufferedLogger have a per-actor buffer instead of a global
buffer
- Added a
SynchronizedLogger and a MultiLogger (intended to be
used with the yet unwritten FileLogger)
- Changed method of atomic logging to be a method
logAll accepting
List[LogEvent] instead of doSynchronized
- Improved action lifecycle logging
- Parallel logging now provides immediate feedback about starting an
action
- General cleanup, including removing unused classes and methods and
reducing dependencies between classes
run is now a method task that accepts options to pass to the main
method (runOptions has been removed, runTask is no longer
interactive, and run no longer starts a console if mainClass is
undefined)
- Major task execution changes:
- Tasks automatically have implicit dependencies on tasks with the
same name in dependent projects
- Implicit dependencies on interactive tasks are ignored, explicit
dependencies produce an error
- 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.
- Small dependency management error message correction
- Slight refactoring for specifying whether scala-tools releases gets
added to configured resolvers
- Separated repository/dependency overriding so that repositories can
be specified inline for use with ivy.xml or pom.xml files
- Added ability to specify Ivy XML configuration in Scala.
- Added
clean-cache action for deleting Ivy’s cache
- Some initial work towards accessing a resource directory from tests
- Initial tests for
Path
- Some additional
FileUtilities methods, some FileUtilities method
adjustments and some initial tests for FileUtilities
- A basic framework for testing
ReflectUtilities, not run by default
because of run time
- Minor cleanup to
Path and added non-empty check to path components
- Catch additional exceptions in
TestFramework
- Added
copyTask task creation method.
- Added
jetty-run action and added ability to package war files.
- Added
jetty-stop action.
- Added
console-quick action that is the same as console but
doesn’t compile sources first.
- Moved some custom
ClassLoaders to ClasspathUtilities and
improved a check.
- Added ability to specify hooks to call before
sbt shuts down.
- Added
zip, unzip methods to FileUtilities
- Added
append equivalents to write* methods in FileUtilites
- Added first draft of integration testing
- Added batch command
compile-stats
- Added methods to create tasks that have basic conditional execution
based on declared sources/products of the task
- Added
newerThan and olderThan methods to Path
- Added
reload action to reread the project definition without
losing the performance benefits of an already running jvm
- Added
help action to tab completion
- Added handling of (effectively empty) scala source files that create
no class files: they are always interpreted as modified.
- Added prompt to retry project loading if compilation fails
package action now uses fileTask so that it only executes if
files are out of date
- fixed
ScalaTest framework wrapper so that it fails the test
action if tests fail
- Inline dependencies can now specify configurations
0.3.1 to 0.3.2
- Compiled jar with Java 1.5.
0.3 to 0.3.1
- Fixed bugs #8, #9, and #10.
0.2.3 to 0.3
- Version change only for first release.
0.2.2 to 0.2.3
- Added tests for
Dag, NameFilter, Version
- Fixed handling of trailing
*s in GlobFilter and added some
error-checking for control characters, which Pattern doesn’t seem to
like
- Fixed
Analysis.allProducts implementation
- It previously returned the sources instead of the generated classes
- Will only affect the count of classes (it should be correct now) and
the debugging of missed classes (erroneously listed classes as
missed)
- Made some implied preconditions on
BasicVersion and OpaqueVersion
explicit
- Made increment version behavior in
ScalaProject easier to overload
- Added
Seq[..Option] alternative to ...Option* for tasks
- Documentation generation fixed to use latest value of version
- Fixed
BasicVersion.incrementMicro
- Fixed test class loading so that
sbt can test the version of sbt
being developed (previously, the classes from the executing version
of sbt were tested)
0.2.1 to 0.2.2
- Package name is now a call-by-name parameter for the package action
- Fixed release action calling compile multiple times
0.2.0 to 0.2.1
- Added some action descriptions
- jar name now comes from normalized name (lowercased and spaces to
dashes)
- Some cleanups related to creating filters
- Path should only ‘get’ itself if the underlying file exists to be
consistent with other PathFinders
- Added
--- operator for PathFinder that excludes paths from the
PathFinder argument
- Removed
*** operator on PathFinder
** operator on PathFinder matches all descendents or self that
match the NameFilter argument
- The above should fix bug
#6
- Added version increment and release actions.
- Can now build sbt with sbt. Build scripts
build and clean will
still exist.
0.1.9 to 0.2.0
- Implemented typed properties and access to system properties
- Renamed
metadata directory to project
- Information previously in
info file now obtained by properties:
info.name --> name
info.currentVersion --> version
- Concrete
Project subclasses should have a constructor that accepts
a single argument of type ProjectInfo (argument
dependencies: Iterable[Project] has been merged into ProjectInfo)
0.1.8 to 0.1.9
- Better default implementation of
allSources.
- Generate warning if two jars on classpath have the same name.
- Upgraded to specs 1.4.0
- Upgraded to
ScalaCheck 1.5
- Changed some update options to be final vals instead of objects.
- Added some more API documentation.
- Removed release action.
- Split compilation into separate main and test compilations.
- A failure in a
ScalaTest run now fails the test action.
- Implemented reporters for
compile/scaladoc, ScalaTest,
ScalaCheck, and specs that delegate to the appropriate sbt.Logger.
0.1.7 to 0.1.8
- Improved configuring of tests to exclude.
- Simplified version handling.
- Task
&& operator properly handles dependencies of tasks it
combines.
- Changed method of inline library dependency declarations to be
simpler.
- Better handling of errors in parallel execution.
0.1.6 to 0.1.7
- Added graph action to generate dot files (for graphiz) from
dependency information (work in progress).
- Options are now passed to tasks as varargs.
- 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.
- Generalized test framework, directly invoking frameworks now (used
reflection before).
- Moved license files to licenses/
- Added support for
specs and some support for ScalaTest (the test
action doesn’t fail if ScalaTest tests fail).
- Added
specs, ScalaCheck, ScalaTest jars to lib/
- These are now required for compilation, but are optional at runtime.
- Added the appropriate licenses and notices.
- Options for
update action are now taken from updateOptions member.
- Fixed
SbtManager inline dependency manager to work properly.
- Improved Ivy configuration handling (not compiled with test
dependencies yet though).
- Added case class implementation of
SbtManager called
SimpleManager.
- Project definitions not specifying dependencies can now use just a
single argument constructor.
0.1.5 to 0.1.6
run and console handle System.exit and multiple threads in
user code under certain circumstances (see
running project code).
0.1.4 to 0.1.5
- Generalized interface with plugin (see Analysis Callback)
- Split out task implementations and paths from
Project to
ScalaProject
- Subproject support (changed required project constructor signature:
see sbt/DefaultProject.scala)
- Can specify dependencies between projects
- Execute tasks across multiple projects
- Classpath of all dependencies included when compiling
- Proper inter-project source dependency handling
- 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.)
- Changing sbt version will recompile project definitions
0.1.3 to 0.1.4
- Autodetection of Project definitions.
- Simple tab completion/history in an interactive session with JLine
- Added descriptions for most actions
0.1.2 to 0.1.3
- Dependency management between tasks and auto-discovery tasks.
- Should work on Windows.
0.1.1 to 0.1.2
- Should compile/build on Java 1.5
- Fixed run action implementation to include scala library on
classpath
- Made project configuration easier
0.1 to 0.1.1
- Fixed handling of source files without a package
- Added easy project setup