Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Buildr lets you easily define common build tasks and their dependencies using a project structure and standardized tasks such as "compile", "test", "package", etc.

Execution Order

Buildr/Rake determine determines the order of execution of tasks through dependency analysis (also known as topological sorting); If Buildr at runtime by ensuring that a task's dependencies are executed first (recursively). Runtime dependency resolution means tasks can be created and ordered dynamically. If Rake detects a cyclic dependency while executing the invocation chain, it will let you know.

Goal Oriented

Buildr Rake will only execute tasks required to achieve the goals goal(s) specified on the command-line, or the default task if no goals are specified. If a task does not execute, it's either because it's not required as part of the transitive dependencies of the stated goals, or because the task determined its output already exists and is up-to-date.

Task Responsibility

goal(s).

Optimization

Each task is responsible for determining if any work is necessary upon its executionEven if Buildr/Rake determine if and when a task should execute, each task is individually responsible for determining if it should do something. If the task's output is already available and up-to-date, the task should typically not redo its do any work.

Project dependencies

Projects implicitly depends on their sub-projects, meaning that the compile task of a project depends on the compile tasks of all its children. A project may depend on a sibling, but not on a parent.

...

Standard project tasks and their dependencies are:

Wiki Markup!image:project-deps.png|width=800!

Concurrency Support

Buildr/Rake support concurrent task execution to shorten build time. Rake's internal data structures are thread-safe with respect to concurrent task execution. However, if data is shared between potentially concurrent tasks, it's the tasks' responsibility to prevent race conditions and data corruption.

...

If Builder doesn't support a feature you need, look for:
1) an existing Buildr plugin,
2) an existing Ant task,
3) an existing Ruby gem library,
4) an existing Java library;
or write your own (smile)

...