SBuild Changelog

What's new in SBuild 0.7.1

Dec 30, 2013
  • SBuild core:
  • Plugin API: Renamed Plugin.PluginConfigurer to Plugin.PluginHandle and
  • changed the configure method to support and encourage immutable plugin
  • configuration instances.
  • Extended Plugin.PluginHandle by get and isModified methods.
  • Check minimal required SBuild versions of plugins.
  • SBuild Addons:
  • ForkSupport: Changed default of parameter 'failOnError' to true in methods
  • runAndWait and runJavaAndWait.
  • ForkSupport: Added directory parameter to runJavaAndWait.

New in SBuild 0.7.0 (Dec 7, 2013)

  • Plugin system with isolated plugin class loading and hierarchical dependency resolving.
  • @classpath annotation not handles all entries as plugins (the JAR manifest will be scanned for SBuild header entries). This can be disabled by adding the prefix "raw:" to the entry.
  • Extended Project API to support Plugins, mostly for internal use.
  • Added Plugin trait/object to SBuild API to activate and interact with plugins.
  • Project resources (@classpath, @include) will be resolved in parallel.
  • Added Logger API.
  • Replaced internal SBuildLogger by SBuildMonitor API.
  • Support for localized output and a partial German translation.
  • Check and warn for identical module definitions in a project.
  • ZipSchemeHandler: When an to-be-extracted resource already exists, but has an older modification date than the zip file, re-extract it and set the modification date accordingly.
  • The cmdline shortcuts support is now able to also match hyphen-delimited target names, e.g. "uS" would match "update-site".
  • The project runtime classpath does include the scala library only once.
  • New RichFile API with contains so filerealted methdod and can be used in implicit conversion.
  • Some API cleanups.
  • New --keep-going commandline option to continue to build unaffected targets even if some targets failed. At the end, a summary of all failed and skipped targets is shown. This might be useful e.g. to run all test targets (in a CI server) which otherwise might fail the build to early.
  • Lock mechanism to avoid compilation of buildfiles concurrently.
  • Various cleanups and package reorganizations.
  • Started documentatio in AsciiDoc format.
  • Added --list-plugins and --list-available-plugin commandline options to show used and unused but available plugins.

New in SBuild 0.6.0 (Sep 20, 2013)

  • Fixed a bug in SBuildEmbedded concerning incomplete file lists for local file dependencies.
  • New ResolveFiles API to eagerly resolve dependencies, e.g. to fulfil additional dependencies of a scheme handler.
  • Changed SchemeHandler API again. Replaced the type String of the path parameter by the new type SchemeContext. With this change, a scheme handler is able to retrieve the effectively used scheme.
  • Refactored initialization logic of ProjectTarget into Project. ProjectTarget is now free of any SchemeHandler logic.
  • Download methods of util, HttpSchemeHandler and MvnSchemeHandler set an SBuild specific user agent. This fixed 403 Forbidden issues for some Maven repositories (e.g. Central).
  • Updated dependencies: Jansi 1.11, CmdOption 0.3.1
  • Added new cmdline option --jobs, -j to configure the number of targets to run in parallel.
  • Improved error handling for parallel builds. A failed target now fails the complete build instantly.
  • Handle invalid commandline options properly.
  • Better download progress (percent, content length, url) and failure handling (resume, retry).
  • Moved SBuild runner into separate project de.tototec.sbuild.runner to keep the SBuild API as small as possible.
  • Improved error messages of ScanSchemeHandler.
  • Added new commandline option --repeat to let SBuild repeat an action after a given time interval.
  • Build script compiler now records scala compiler output, e.g. for later use in IDEs. Created new scriptcompiler project.
  • Added support for sequential dependencies, which will be executed sequentially. You have to use "~~" instead of "~".
  • Various internal cleanups.

New in SBuild 0.5.0 (Jul 13, 2013)

  • Updated dependencies: Scala 2.10.2, Jansi 1.10.
  • Added support to reference scheme handlers of other projects/modules.
  • Added parameters useArgsFile, jvmArgs and sourcePath to Scalac addon.
  • Added Scalac.scalaClasspath(version) classpath factory.
  • Fix FileNotFoundException in execution of cacheable targets with path separators in it's name.
  • Allow to evict caches per cacheable target.
  • Huge speed up in up-to-date detection algorithm.
  • Added SchemeHandler.replace method to make the intend to replace a already registered scheme handler explicit (and checked).
  • New MapperSchemeHandler to translate schemes and/or pathes, to be used in "source" and "javadoc" scheme.
  • New experimental default schemes "source" and "javadoc", that will try to provided sources and javadoc for any given dependency, e.g. "source:mvn:a.b.1" will be translated to "mvn:a.b.1;classifier=sources"
  • Fixed --fsc option.
  • Fixed colored output under windows.
  • Bash Completion support.
  • BndJar addon creates now the target directory, if it does not exists.
  • New experimental scheme handler to access 'val's and 'def's in projects in new project de.tototec.sbuild.experimental.
  • Added mechanism to locate files relative to included scala files, via Path[Config]("path/relative/to/Config.scala").
  • Removed deprecated code: IfNotUpToDate, PersistentUpToDateChecker. Their functionality is now provided via phony cacheable targets (Target.cacheable, Target.evictCache).
  • Deprecated Pathes and added Paths object.

New in SBuild 0.4.0 (Mar 12, 2013)

  • Fixed --dependencyTree not showing up on when not used with --verbose.
  • Added new commandline option --list-modules to show a list of all involved modules (sub-projects).
  • Based up-to-date detection of phony targets on virtual last modified time stamps instead of boolean marker.
  • Reworked preorder dependency algorithm.
  • Improved internally used download function, which now handles successful download more efficiently and does not leave temp file on download failures. This improves all scheme handlers as well.
  • Added new commandline options --check and --check-recursive to check all defined targets for cycles and potentially missing scheme handlers. This will also detect projects with cacheable targets, that do not define an evictCache target.
  • Added new class Module which can be used to easily create target references to targets in that module with Module.targetRef(String) and Module.targetRefs(String*).
  • Module(String) and Modules(String*) now return a Module resp. a Seq[Module].
  • Deprecated Module.apply(String*) as the return value differs from Module.apply(String), which is not obvious. Use Modules.apply(String*) instead.
  • Build script compiler now emits deprecation warnings.
  • SBuild now has slightly colored output based on jansi.fusesource.org, which can be disabled with --no-color command line option.
  • Improved error reporting on the commandline.
  • Added TargetContext.attachFile to attach additional file(s) to a target. Those files are now also included in the return value of TargetRef.files.
  • TargetRef.files can now only be used inside a Target execution, and only on dependencies that are declared in dependsOn of that executing target.
  • Added TargetContext.prerequisitesLastModified to retrieve the effective lastModified value of all declared dependencies.
  • New ScanSchemeHandler, to scan a directory, based on a pattern and attach all found files to the target context. That way, one can depend on a set of files, considering their up-to-dateness.
  • New (experimental) embedded API, dedicated to SBuild embedding, e.g. in SBuild Eclipse Plugin
  • Fixed return value handling in shell wrapper, resulting in sbuild command line application always returning 0.
  • Updated German translations.
  • Improved tolerance for truncated last modified time stamps of files.
  • Also print the target self description when executing, if any.
  • Added support for additional commandline options via environment variable SBUILD_OPTS.
  • Added new command line options --just-clean and --just-clean-recursive to delete all .sbuild state directories (recursive) without checking and reading any SBuild build file.
  • Cache Scala compiler instance when reading projects, to improve compilation speed for build files.
  • Dramatic speedup of dependency tree traversal.
  • New Javac addon.
  • Support for newer bndlib in BndJar addon.
  • Added method Module.apply to construct TargetRef.
  • Empty phony targets now automatically attach their dependencies files to their own target context.

New in SBuild 0.3.2 (Jan 28, 2013)

  • Common scheme handlers (mvn, http, zip) are now registered by default, but can be overridden as usual
  • All by-default registered scheme handler can now be used in @classpath and @include elements
  • Changed behavior of --version command line option. It now exists the application as expected
  • Added new AntZipFileSet for conveniene when using AntZip
  • Added new ScalaRepl addon providing access to the interactive Scala console
  • Fixed issues in parser for @classpath and @include

New in SBuild 0.3.1 (Jan 18, 2013)

  • Added ability to translate/resolve (any) target ref(s) to files.
  • Changed default to not use fsc when compiling build files and added new commandline option "--fsc" to enable fsc.
  • Pathes and file dependencies pointing to symbolic links will be no longer implicitly resolved.
  • ZipSchemeHandler: Fixed up-to-date detected issue, when a ZIP entry gets always reextracted.
  • ZipSchemeHandler: Fixed bug, where extraction of files, that don't exists in ZIP file, were silently ignored.
  • New BndJar Addon to generate OSGi Bundles based on bndlib.
  • Fixed Windows start script.

New in SBuild 0.3.0 (Jan 4, 2013)

  • SBuild is now based on Scala 2.10
  • ZipSchemeHandler: Fixed issue with fail of unpacking of some zip files.
  • New Scalac Addon which is independent of SBuild Scalac Runtime. Thus, it is
  • now possible to compile for Scala versions different than SBuild's one.
  • ScalaTest Addon: Added fork option.

New in SBuild 0.2.0 (Nov 14, 2012)

  • A buildfile can now include other scala files. Added @include to share common configuration and functionality.
  • Added project accessor to TargetContext.
  • Added --quiet command line option to suppress percentage calculation and status messages. This will drastically speed up SBuild's initialization time for larger multi-projects, as the dependency tree is not walked trough in advance.
  • Added arguments parameter to AntJava, as args is deprecated.
  • Added more options/parameters to ScalaTest addon.
  • Command line option --create-stub now tries to copy a stub from SBuild's home directory ($SBUILD_HOME/stub/SBuild.scala) if such one exists, before using a hardcoded one.

New in SBuild 0.1.5 (Oct 27, 2012)

  • Fixed NPE bug in AntCopy.

New in SBuild 0.1.4 (Oct 24, 2012)

  • Added parameters to AntZip Ant wrapper: compress, keepCompression, filesOnly, fileSet, fileSete
  • Added parameters to AntJar Ant wrapper: compress, keepCompression, filesOnly, metaInf, fileSet, fileSets, manifestEntries, manifestSectionEntries, service, services
  • Added parameter to AntCopy Ant wrapper: fileSet
  • Added @configuration annotation, to declare required configuration parameters in a project
  • Eclipse plugin: Fixed an problem with an incomplete project classpath that could break loading of projects in some situations.
  • Eclipse plugin: Handle errors while reading the build file and retrieving dependencies
  • Improved ZipSchemeHandler: The targetFile parameter now treats its argument as path relative the to project directory.
  • Internal changes in classpath handling. The various classpathes SBuild needs when reading, compiling and executing projects are now read from a properties file in the installation directory, which decouples embedded solutions like the Eclipse Plugin and allows them to load different SBuild versions.
  • Added get method to Prop object, to easily test, if an property is set.
  • Eclipse plugin: Decoupled plugin version from SBuild JARs. Plugin no longer includes core packages and load SBuild JARs from it installation directory.
  • Ensure, ZipSchemeHandler does not overwrite files with same name from different archives.

New in SBuild 0.1.3 (Oct 20, 2012)

  • Improved classloading for ScalaTest and JUnit addons.
  • Incompatible API change: SchemeHandler can now have dependencies, when implementing the trait SchemeHandlerWithDependencies and have access to them through the TargetContext, which will be given as parameter into resolve method.
  • Added new ZipSchemeHandler to reference zipped resources, a typical use case for original online dependencies like TestNG, JUnit or SWT.
  • Fixed a bug, where the self-evaluated up-to-date state of phony targets was lost causing some unnecessary executions.

New in SBuild 0.1.2 (Oct 5, 2012)

  • Fixed cross-project dependency resolution problem for file targets.

New in SBuild 0.1.1 (Oct 5, 2012)

  • SBuild now builds itself. SBuild-0.1.0 is required. :-)
  • SchemeHandler API changed: Return value of resolve-method changed to ResolveResult.
  • Added new parameter forceDownload to HttpSchemeHandler.
  • Improved/fixed up-to-date detection for prerequisites/dependencies from different projects.
  • Only targets defined in buildfiles will be shown with --list and --list-rekursive, implicitly create targets will be not.
  • Improved error messages.
  • Imporved logging.
  • Added new commandline option --dependency-tree to show the dependency tree for the requested targets.
  • Better cycle-detecting in target dependencies.
  • Better detection, if the buildfile needs recompilation in case that different versions of SBuild are used.
  • Run SBuild JVM with more PermGemSpace to avoid OutOfMemoryErrors.
  • New Eclipse Plugin that is able the provide a classpath container based on an SBuild buildfile. Therefore the function ExportDependencies was added.
  • Removed parameter dir:String from AntMkDir.
  • Added parameter fileSets to AntCopy.
  • Added parameter jvmArgs to AntScalac.
  • Added parameter failOnError to AntJava.
  • Added a lot of new parameter to AntJavac.
  • Added parameter envs to AntEcec.
  • Added addon ScalaTest.
  • Added addon JUnit.