"As a developer, I don't want to tell my build script what to do,
I want to just tell what (file) I want so the script can then decide what really needs to be done. If anything."
iwant is a build system. Some of its key features are:
- The build "scripts" (programs) are written in Java, which gives the author access to the full power of IDEs and Java libraries, including those being built by the build program (reusing code between build-time and run-time).
- The API for writing build programs is fluent, resulting in compact and readable code.
- The build script author does not need to declare dependencies. If a target (a file with dynamically defined content) refers to another path (source or target) in its definition,
iwant automatically tracks this as a dependency.
- Multi-threaded building is supported by default, transparently. It only needs to be disabled for targets that don't support it (for example because they use shared resources.)
- Command-line user interface utilizes bash completion so the user can avoid a lot of typing by using
iwant bootstraps itself from a specific revision, so the build system itself is also under configuration management, resulting in repeatable build results.
- Target evaluation is referentially transparent, which enables maximal laziness. Side effects (like deployments) are explicitly declared in a different way.
General status of the project:
- The engine is quite solid. It has been used in several projects for several years, on Linux and Windows. There are some caveats, though (to be fixed later):
- It is not recommended to run several
iwant processes at the same time by the same user, since the shared cache is not locked.
- It is not recommended to touch sources during build, since timestamp comparison is only done before refreshing targets, resulting in false clean status for a target that is being refreshed while one of its sources is touched.
- The API hasn't yet been stablized so build programs may need modifications when upgrading.
- Although the number of plugins is still small, the utility of
iwant is already good, because it is easy to extend the functionality by calling shell or ant scripts or java libraries.
Some of the most important features, like taking
iwant into use, are documented in the tutorial, in a documentation driven manner
You can track the project progress and plans in the