sbt/src/sphinx/Community/Changes.rst

1144 lines
51 KiB
ReStructuredText

=======
Changes
=======
0.12.0 to 0.12.1
~~~~~~~~~~~~~~~~
Dependency management fixes:
- Merge multiple dependency definitions for the same ID. Workaround for gh-468, gh-285, gh-419, gh-480.
- Don't write section of pom if scope is 'compile'.
- Ability to properly match on artifact type. Fixes gh-507 (Thomas).
- Force ``update`` to run on changes to last modified time of artifacts
or cached descriptor (part of fix for gh-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. Fixes gh-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 compile`` will 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 gh-512, gh-515.
- Proper isolation of build definition classes. Fixes gh-536, gh-511.
- ``orbit`` packaging should be handled like a standard jar. Fixes gh-499.
- In ``IO.copyFile``, limit maximum size transferred via NIO. Fixes gh-491.
- Add OSX JNI library extension in ``includeFilter`` by default. Fixes gh-500. (Indrajit)
- Translate ``show x y`` into ``;show x ;show y`` . Fixes gh-495.
- Clean up temporary directory on exit. Fixes gh-502.
- ``set`` prints 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):
- ``sourcesInBase`` setting controls whether sources in base directory
are included. Fixes gh-494.
0.11.3 to 0.12.0
~~~~~~~~~~~~~~~~
The changes for 0.12.0 are listed on a separate page. See
:doc:`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 ``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
- 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 :doc:`/Extending/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: :doc:`/Examples/Quick-Configuration-Examples/`,
:doc:`/Getting-Started/Full-Def`, and :doc:`/Getting-Started/Basic-Def/`
- New task engine: :doc:`/Detailed-Topics/Tasks`
- New multiple project support: :doc:`/Getting-Started/Full-Def`
- More aggressive incremental recompilation for both Java and Scala sources
- Merged plugins and processors into improved plugins system:
:doc:`/Extending/Plugins`
- `Web application <https://github.com/JamesEarlDouglas/xsbt-web-plugin>`_ 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 :doc:`/Detailed-Topics/Artifacts`
- Tab completion parser combinators for commands and input tasks:
:doc:`/Extending/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 <http://lampsvn.epfl.ch/trac/scala/ticket/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 ``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 <http://ant.apache.org/ivy/history/2.2.0/release-notes.html>`_.
- Trond's patches that allow configuring
`jetty-env.xml <http://github.com/harrah/xsbt/commit/5e41a47f50e6>`_
and
`webdefault.xml <http://github.com/harrah/xsbt/commit/030e2ee91bac0>`_
- Doug's `patch <http://github.com/harrah/xsbt/commit/aa75ecf7055db>`_
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): Boolean`` that
can be overridden to exclude local repositories by default
- Added ``pomPostProcess(pom: Node): Node`` to make advanced
manipulation of the default pom easier (``pomExtra`` already covers
basic cases)
- Added ``reset`` command 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 ``consoleOptions`` for specifying options to the console. It
defaults to ``compileOptions``.
- Properly support sftp/ssh repositories using key-based
authentication. See the updated section of the :doc:`/Detailed-Topics/Resolvers` page.
- ``def ivyUpdateLogging = UpdateLogging.DownloadOnly | Full | Quiet``.
Default is ``DownloadOnly``. ``Full`` will log metadata resolution
and provide a final summary.
- ``offline`` property 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 label
``cache-directory``. Specify this to change the cache location used
by the launcher.
- New label ``classifiers`` under ``[app]`` to specify classifiers of
additional artifacts to retrieve for the application.
- Honor ``-Xfatal-warnings`` option added to compiler in 2.8.0.RC2.
- Make ``scaladocTask`` a ``fileTask`` so that it runs only when
``index.html`` is 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
``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.
- 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 ``Processor``\ s)
- 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:
``scala 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 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 ``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:
``scala > javap your.Clazz > javap -c scala.List``
- Added ``exec`` task. Mixin ``Exec`` to project definition to use.
This forks the command following ``exec``. Examples:
``scala > 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:
``scala > 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:
``scala override def projectID = super.projectID extra(key -> value)``
To specify in a dependency:
``scala 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 ``Path``\ s 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 ``URL``\ s and
``File``\ s to standard output. Alternatively, ``cat`` can be used on
a single ``URL`` or ``File``. Example:
``scala 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 CompilerPlugins 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
- ``ScalaProject``\ s 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 ``ClassLoader``\ s 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 RunningProjectCode).
0.1.4 to 0.1.5
~~~~~~~~~~~~~~
- Generalized interface with plugin (see ``AnalysisCallback``)
- 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