52 KiB
0.12.0 to 0.12.1 (unreleased)
Dependency management fixes:
- Merge multiple dependency definitions for the same ID. Workaround for #468, #285, #419, #480.
- Don't write section of pom if scope is 'compile'.
- Ability to properly match on artifact type. Fixes #507 (Thomas).
- Force
updateto run on changes to last modified time of artifacts or cached descriptor (part of fix for #532). It may also fix issues when working with multiple local projects via 'publish-local' and binary dependencies. - Per-project resolution cache that deletes cached files before
update. Notes:- The resolution cache differs from the repository cache and does not contain dependency metadata or artifacts.
- The resolution cache contains the generated ivy files, properties, and resolve reports for the project.
- There will no longer be individual files directly in
~/.ivy2/cache/ - Resolve reports are now in
target/resolution-cache/reports/, viewable with a browser. - Cache location includes extra attributes so that cross builds of a plugin do not overwrite each other. #532
Three stage incremental compilation:
- As before, the first step recompiles sources that were edited (or otherwise directly invalidated).
- The second step recompiles sources from the first step whose API has changed, their direct dependencies, and sources forming a cycle with these sources.
- The third step recompiles transitive dependencies of sources from the second step whose API changed.
- Code relying mainly on composition should see decreased compilation times with this approach.
- Code with deep inheritance hierarchies and large cycles between sources may take longer to compile.
last compilewill show cycles that were processed in step 2. Reducing large cycles of sources shown here may decrease compile times.
Miscellaneous fixes and improvements:
- Various test forking fixes. Fixes #512, #515.
- Proper isolation of build definition classes. Fixes #536, #511.
orbitpackaging should be handled like a standard jar. Fixes #499.- In
IO.copyFile, limit maximum size transferred via NIO. Fixes #491. - Add OSX JNI library extension in
includeFilterby default. Fixes #500. (Indrajit) - Translate
show x yinto;show x ;show y. Fixes #495. - Clean up temporary directory on exit. Fixes #502.
setprints the scopes+keys it defines and affects.- Tab completion for
set(experimental). - Report file name when an error occurs while opening a corrupt zip file in incremental compilation code. (James)
- Defer opening logging output files until an actual write. Helps reduce number of open file descriptors.
- Back all console loggers by a common console interface that merges (overwrites) consecutive
Resolving xxxx ...lines when ansi codes are enabled (as first done by Play).
Forward-compatible-only change (not present in 0.12.0):
sourcesInBasesetting controls whether sources in base directory are included. Fixes #494.
0.11.3 to 0.12.0
The changes for 0.12.0 are listed on a separate page. See ChangeSummary_0.12.0.
0.11.2 to 0.11.3
Dropping scala-tools.org:
- 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
ScalaToolsReleasesandScalaToolsSnapshotsnow point tohttps://oss.sonatype.org/content/repositories/releasesand.../snapshots - The launcher no longer includes
scala-tools.orgrepositories by default and instead uses the Sonatype OSS snapshots repository for Scala snapshots. - The
scala-tools.orgreleases 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
maxErrorssetting is no longer ignored- Correct test count #372 (Eugene)
- Fix file descriptor leak in process library (Daniel)
- Buffer url input stream returned by Using #437
- Jsch version bumped to 0.1.46 #403
- JUnit test detection handles ancestors properly (Indrajit)
- Avoid unnecessarily re-resolving plugins #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 #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 (#217).
Fixes:
- #257 Fix invalid classifiers in pom generation (Indrajit)
- #255 Fix scripted plugin descriptor (Artyom)
- Fix forking git on windows (Stefan, Josh)
- #261 Fix whitespace handling for semicolon-separated commands
- #263 Fix handling of dependencies with an explicit URL
- #272 Show deprecation message for
project/plugins/
0.11.0 to 0.11.1
Breaking change:
- The scripted plugin is now in the
sbtpackage 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> - #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 - #169 Add support for exclusions with excludeAll and exclude methods on ModuleID. (Indrajit)
- #235 Checksums configurable for launcher
- #246 Invalidate
updatewhenupdateis invalidated for an internal project dependency - #138 Include plugin sources and docs in
update-sbt-classifiers - #219 Add cleanupCommands setting to specify commands to run before interpreter exits
- #46 Fix regression in caching missing classifiers for
update-classifiersandupdate-sbt-classifiers. - #228 Set
connectInputto true to connect standard input to forked run - #229 Limited task execution interruption using ctrl+c
- #220 Properly record source dependencies from separate compilation runs in the same step.
- #214 Better default behavior for classpathConfiguration for external Ivy files
- #212 Fix transitive plugin dependencies.
- #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.
- #174, #196, #201, #204, #207, #208, #226, #224, #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
runandtest(but notconsole, for example) -
Automatic plugin cross-versioning. Use
addSbtPlugin("group" % "name" % "version")in
project/plugins.sbtinstead oflibraryDependencies += ...See Plugins for details
Fixes and Improvements:
- Display all undefined settings at once, instead of only the first one
- Deprecate separate
classpathFilter,defaultExcludes, andsourceFilterkeys in favor ofincludeFilterandexcludeFilterexplicitly scoped byunmanagedSources,unmanagedResources, orunmanagedJarsas appropriate (Indrajit) - Default to using shared boot directory in
~/.sbt/boot/ - Can put contents of
project/plugins/directly inproject/instead. Will likely deprecateplugins/directory - Key display is context sensitive. For example, in a single project, the build and project axes will not be displayed
- #114, #118, #121, #132, #135, #157: Various settings and error message improvements
- #115: Support configuring checksums separately for
publishandupdate - #118: Add
aboutcommand - #118, #131: Improve
lastcommand. Aggregatelast <task>and display all recent output forlast - #120: Support read-only external file projects (Fred)
- #128: Add
skipsetting to override recompilation change detection - #139: Improvements to pom generation (Indrajit)
- #140, #145: Add standard manifest attributes to binary and source jars (Indrajit)
- Allow sources used for
docgeneration to be different from sources forcompile - #156: Made
packagean alias forpackage-bin - #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 #53
- Try out some better error messages for build.sbt in a few common situations #58
- Drop "Incomplete tasks ..." line from error messages. #32
- Better handling of javac logging. #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 #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). #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: Quick Configuration Examples, Full Configuration, and Basic Configuration
- New task engine: Tasks
- New multiple project support: Full Configuration
- 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-classifiersandupdate-classifierstasks for retrieving sources and/or javadocs for dependencies, transitively- Improved artifact handling and configuration Artifacts
- Tab completion parser combinators for commands and input tasks: Commands
- No project creation prompts anymore
- Moved to GitHub: http://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 http://gist.github.com/404272
- Fix
providedconfiguration. 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
- prefix continuous compilation with run number for better feedback when logging level is 'warn'
- Added
pomIncludeRepository(repo: MavenRepository): Booleanthat can be overridden to exclude local repositories by default - Added
pomPostProcess(pom: Node): Nodeto make advanced manipulation of the default pom easier (pomExtraalready covers basic cases) - Added
resetcommand to reset JLine terminal. This needs to be run after suspending and then resuming sbt. - Installer plugin is now a proper subproject of sbt.
- Plugins can now only be Scala sources. BND should be usable in a plugin now.
- More accurate detection of invalid test names. Invalid test names now generate an error and prevent the test action from running instead of just logging a warning.
- Fix issue with using 2.8.0.RC1 compiler in tests.
- Precompile compiler interface against 2.8.0.RC2
- Add
consoleOptionsfor specifying options to the console. It defaults tocompileOptions. - Properly support sftp/ssh repositories using key-based authentication. See the updated section of the Resolvers page.
def ivyUpdateLogging = UpdateLogging.DownloadOnly | Full | Quiet. Default isDownloadOnly.Fullwill log metadata resolution and provide a final summary.offlineproperty for disabling checking for newer dynamic revisions (like-SNAPSHOT). This allows working offline with remote snapshots. Not honored for plugins yet.- History commands:
!!, !?string, !-n, !n, !string, !:n, !:Run!to see help. - New section in launcher configuration
[ivy]with a single labelcache-directory. Specify this to change the cache location used by the launcher. - New label
classifiersunder[app]to specify classifiers of additional artifacts to retrieve for the application. - Honor
-Xfatal-warningsoption added to compiler in 2.8.0.RC2. - Make
scaladocTaskafileTaskso that it runs only whenindex.htmlis older than some input source. - Made it easier to create default
test-*tasks with different options - Sort input source files for consistency, addressing scalac's issues with source file ordering.
- Derive Java source file from name of class file when no
SourceFileattribute is present in the class file. Improves tracking when-g:noneoption is used. - Fix
FileUtilities.unzipto 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]withlines. - 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.
TestDefinitionno longer fulfills this role. TestDefinitionis modified to be name+Fingerprintand represents a runnable test. It need not beDiscovered, but could be file-based in the future, for example.- Replaced testDefinitionClassNames method with
fingerprintsinCompileConfiguration. - Added foundAnnotation to
AnalysisCallback - Added
Runner2,Fingerprint,AnnotationFingerprint, andSubclassFingerprintto the test-interface. Existing test frameworks should still work. ImplementRunner2to use fingerprints other thanSubclassFingerprint.
0.7.1 to 0.7.2
Process.applyno longer usesCommandParser. This should fix issues with the android-plugin.- Added
sbt.impl.Argumentsfor parsing a command like a normal action (forProcessors) - Arguments are passed to
javacusing an argument file (@) - Added
webappUnmanaged: PathFindermethod toDefaultWebProject. Paths selected by thisPathFinderwill not be pruned byprepare-webappand will not be packaged bypackage. For example, to exclude the GAE datastore directory:
override def webappUnmanaged =
(temporaryWarPath / "WEB-INF" / "appengine-generated" ***)
- Added some String generation methods to
PathFinder:toStringfor debugging andabsStringandrelativeStringfor joining the absolute (relative) paths by the platform separator. - Made tab completors lazier to reduce startup time.
- Fixed
console-projectfor custom subprojects Processorsplit intoProcessor/BasicProcessor.Processorprovides high level of integration with command processing.BasicProcessoroperates on aProjectbut does not affect command processing.- Can now use
Launcherexternally, including launchingsbtoutside of the official jar. This means aProjectcan now be created from tests. - Works with Scala 2.8 trunk
- Fixed logging level behavior on subprojects.
- All sbt code is now at http://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
libdirectory. 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 firstsbtmethod. 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.versionsproperty. - Dependency management:
make-pomtask 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.delimiterandsbt.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
sbtversion to use in projects can be fixed, instead of read fromproject/build.properties. - The default values used to create a new project can be changed.
- The repositories used to fetch
sbtand its dependencies, including Scala, can be configured. - The location
sbtis retrieved to is configurable. For example,/home/user/.ivy2/sbt/could be used instead ofproject/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
FilterLoggerand cleaned up interaction betweenLogger, scripted testing, and the builder projects. This included removing therecordingDepthhack from Logger. Logger buffering is now enabled/disabled per thread. - Fix
compileOptionsbeing fixed after the first compile - Minor fixes to output directory checking
- Added
defaultLoggingLevelmethod for setting the initial level of a project'sLogger - Cleaned up internal approach to adding extra default configurations like
plugin - Added
syncPathsTaskfor synchronizing paths to a target directory - Allow multiple instances of Jetty (new
jettyRunTaskscan be defined with different ports) jettyRunTaskaccepts configuration in a single configuration wrapper object instead of many parameters- Fix web application class loading (issue #35) by using
jettyClasspath=testClasspath---jettyRunClasspathfor loading Jetty. A better way would be to have ajettyconfiguration and havejettyClasspath=managedClasspath('jetty'), but this maintains compatibility. - Copy resources to
target/resourcesandtarget/test-resourcesusingcopyResourcesandcopyTestResourcestasks. Properly include all resources in web applications and classpaths (issue #36).mainResourcesandtestResourcesare now the definitive methods for getting resources. - Updated for 2.8 (
sbtnow 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
javaptask toDefaultProject. It has tab completion on compiled project classes and the run classpath is passed tojavapso that library classes are available. Examples:
> javap your.Clazz
> javap -c scala.List
- Added
exectask. MixinExecto project definition to use. This forks the command followingexec. Examples:
> exec echo Hi
> exec find src/main/scala -iname *.scala -exec wc -l {} ;
- Added
shtask for users with a unix-style shell available (runs/bin/sh -c <arguments>). MixinExecto 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-srcandgraph-pkgfor 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 (
InstallProjectwith 'install' task) - Vesa's patch for configuring the output of forked Scala/Java and processes
- Don't buffer logging of forked
runby default - Check
Project.terminateWatchto 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)onModuleIDsandArtifacts. 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
sbtplugins were not on the compile classpath - Added
execTaskthat runs ansbt.ProcessBuilderwhen invoked - Added implicit conversion from
scala.xml.Elemtosbt.ProcessBuilderthat 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-testby default - Can define and use an sbt test framework extension in a project
- Fixed
runaction swallowing exceptions - Fixed tab completion for method tasks for multi-project builds
- Check that tasks in
compoundTaskdo not reference static tasks - Make
toStringofPaths in subprojects relative to root project directory crossScalaVersionsis now inherited from parent if not specified- Added
scala-library.jarto thejavacclasspath - Project dependencies are added to published
ivy.xml - Added dependency tracking for Java sources using classfile parsing (with the usual limitations)
- Added
Process.catthat will send contents ofURLs andFiles to standard output. Alternatively,catcan be used on a singleURLorFile. 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
ScalaTestframework dropping stack traces - Publish only public configurations by default
- Loader now adds
.m2/repositoryfor 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
sbtagainst new Scala versions (attempt #2) - Fixed snapshot reversion handling (Ivy needs changing pattern set on cache, apparently)
- Fixed handling of default configuration when
useMavenConfigurationistrue - 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
URLto use for dependency with thefrom(url: URL)method defined onModuleID - 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) orproject/build(flat) - Fixed manual
rebootnot changing the version of Scala when it is manuallyset - 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-Pathattribute from showing up forrun - Fixed
package-projectoperation - Fixed
Path.fromFile - Fixed issue with external process output being lost when sent to a
BufferedLoggerwithparallelExecutionenabled. - Preserve history across
clean - Fixed issue with making relative path in jar with wrong separator
- Added cross-build functionality (prefix action with
+). - Added methods
scalaLibraryJarandscalaCompilerJartoFileUtilities - Include project dependencies for
deliver/publish - Add Scala dependencies for
make-pom/deliver/publish, which requires these to depend onpackage - Properly add compiler jar to run/test classpaths when main sources depend on it
TestFrameworkrootClassLoaderfilters compiler classes used bysbt, which is required for projects using the compiler.- Better access to dependencies:
mainDependenciesandtestDependenciesprovide an analysis of the dependencies of your code as determined during compilationscalaJarsis deprecated, usemainDependencies.scalaJarsinstead (provides aPathFinder, which is generally more useful)- Added
jettyPortmethod toDefaultWebProject. - Fixed
package-projectto excludeproject/bootandproject/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_proxyenvironment variable - Added
downloadmethod from Nathan toFileUtilitiesto retrieve the contents of a URL. - Added special support for compiler plugins, see CompilerPlugins page.
reloadcommand in scripted tests will now properly handle success/failure- Very basic support for Java sources: Java sources under
src/main/javaandsrc/test/javawill be compiled. parallelExecutiondefaults to value in parent project if there is one.- Added 'console-project' that enters the Scala interpreter with the current
Projectbound to the variableproject. - The default Ivy cache manager is now configured with
useOrigin=trueso that it doesn't cache artifacts from the local filesystem. - For users building from trunk, if a project specifies a version of
sbtthat ends in-SNAPSHOT, the loader will updatesbtevery time it starts up. The trunk version ofsbtwill always end in-SNAPSHOTnow. - Added automatic detection of classes with main methods for use when
mainClassis not explicitly specified in the project definition. If exactly one main class is detected, it is used forrunandpackage. If multiple main classes are detected, the user is prompted for which one to use forrun. Forpackage, noMain-Classattribute is automatically added and a warning is printed. - Updated build to cross-compile against Scala 2.7.4.
- Fixed
proguardtask insbt's project definition - Added
manifestClassPathmethod that accepts the value for theClass-Pathattribute - Added
PackageOptioncalledManifestAttributesthat 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_proxyenvironment variable) - Implemented issue #21 (native process wrapper)
- Fixed issue #22 (rebuilding and republishing released versions of
sbtagainst 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-libraryandscala-compilerare filtered - They are fixed by
scala.versionand provided on the classpath bysbt - To access them, use the
scalaJarsmethod,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
sbtand Scala printed on startup - Launcher asks if you want to try a different version if
sbtor Scala could not be retrieved. - After changing
scala.versionorsbt.versionwithset, note is printed thatrebootis required. - Moved managed dependency actions to
BasicManagedProject(updateis now available onParentProject) - Cleaned up
sbt's build so that you just need to doupdateandfull-buildto build from source. The trunk version ofsbtwill 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 andproguardto 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 (
packagegroup 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.propertiesbeing 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
sleepandnewercommands to scripted testing. - Scripted tests now test the version of
sbtbeing built instead of the version doing the building. testResourcesis put on the test classpath instead oftestResourcesPath- Added
jetty-restart, which doesjetty-stopand thenjetty-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
BasicScalaProjectto new classBasicManagedProject - Can specify that maven-like configurations should be automatically declared
- Fixed problem with nested modules being detected as tests
testResources,integrationTestResources, andmainResourcesshould 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, andmethodscommands 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
controlmethod toLoggerfor action lifecycle logging - Made standard logging level convenience methods final
- Made
BufferedLoggerhave a per-actor buffer instead of a global buffer - Added a
SynchronizedLoggerand aMultiLogger(intended to be used with the yet unwrittenFileLogger) - Changed method of atomic logging to be a method
logAllacceptingList[LogEvent]instead ofdoSynchronized - 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
runis now a method task that accepts options to pass to themainmethod (runOptionshas been removed,runTaskis no longer interactive, andrunno longer starts a console ifmainClassis 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-onlymethod task, which restricts the tests to run to only those passed as arguments. - Added
test-failedmethod 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-quickmethod 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
ParentProjectcan now specify dependencies- Support for
optionalscope - 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.svndirectories 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.xmlorpom.xmlfiles - Added ability to specify Ivy XML configuration in Scala.
- Added
clean-cacheaction for deleting Ivy's cache - Some initial work towards accessing a resource directory from tests
- Initial tests for
Path - Some additional
FileUtilitiesmethods, someFileUtilitiesmethod adjustments and some initial tests forFileUtilities - A basic framework for testing
ReflectUtilities, not run by default because of run time - Minor cleanup to
Pathand added non-empty check to path components - Catch additional exceptions in
TestFramework - Added
copyTasktask creation method. - Added
jetty-runaction and added ability to package war files. - Added
jetty-stopaction. - Added
console-quickaction that is the same asconsolebut doesn't compile sources first. - Moved some custom
ClassLoaders toClasspathUtilitiesand improved a check. - Added ability to specify hooks to call before
sbtshuts down. - Added
zip,unzipmethods toFileUtilities - Added
appendequivalents towrite*methods inFileUtilites - 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
newerThanandolderThanmethods toPath - Added
reloadaction to reread the project definition without losing the performance benefits of an already running jvm - Added
helpaction 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
packageaction now usesfileTaskso that it only executes if files are out of date- fixed
ScalaTestframework wrapper so that it fails thetestaction 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 inGlobFilterand added some error-checking for control characters, whichPatterndoesn't seem to like - Fixed
Analysis.allProductsimplementation - 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
BasicVersionandOpaqueVersionexplicit - Made increment version behavior in
ScalaProjecteasier 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
sbtcan test the version ofsbtbeing developed (previously, the classes from the executing version ofsbtwere 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 forPathFinderthat excludes paths from thePathFinderargument - Removed
***operator onPathFinder **operator onPathFindermatches all descendents or self that match theNameFilterargument- The above should fix bug
#6 - Added version increment and release actions.
- Can now build sbt with sbt. Build scripts
buildandcleanwill still exist.
0.1.9 to 0.2.0
- Implemented typed properties and access to system properties
- Renamed
metadatadirectory toproject - Information previously in
infofile now obtained by properties: info.name --> nameinfo.currentVersion --> version- Concrete
Projectsubclasses should have a constructor that accepts a single argument of typeProjectInfo(argumentdependencies: Iterable[Project]has been merged intoProjectInfo)
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
ScalaCheck1.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
ScalaTestrun now fails the test action. - Implemented reporters for
compile/scaladoc,ScalaTest,ScalaCheck, andspecsthat delegate to the appropriatesbt.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
Pathproperly, includingPathFinderreturning aSet[Path]now instead ofIterable[Path]. - Moved paths out of
ScalaProjectand intoBasicProjectPathsto keep path definitions separate from task definitions. - Added initial support for managing third-party libraries through the
updatetask, 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:
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)
runandconsoleare 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
projectare 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
updatetask 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
specsand some support forScalaTest(the test action doesn't fail ifScalaTesttests fail). - Added
specs,ScalaCheck,ScalaTestjars to lib/ - These are now required for compilation, but are optional at runtime.
- Added the appropriate licenses and notices.
- Options for
updateaction are now taken from updateOptions member. - Fixed
SbtManagerinline dependency manager to work properly. - Improved Ivy configuration handling (not compiled with test dependencies yet though).
- Added case class implementation of
SbtManagercalledSimpleManager. - Project definitions not specifying dependencies can now use just a single argument constructor.
0.1.5 to 0.1.6
runandconsolehandleSystem.exitand multiple threads in user code under certain circumstances (see RunningProjectCode).
0.1.4 to 0.1.5
- Generalized interface with plugin (see
AnalysisCallback) - Split out task implementations and paths from
ProjecttoScalaProject - 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