"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."
What is iwant
iwant
is a build system. Some of its key features are:
- Powerful: 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).
- Expressive: The API for writing build programs is fluent, resulting in compact and readable code.
- Ergonomic: 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.
- Parallel: 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.)
- Easy to use: Command-line user interface utilizes bash completion so the user can avoid a lot of typing by using
tab
- Reproducible:
iwant
bootstraps itself from a specific revision, so the build system itself is also under configuration management, resulting in reproducible build results.
- LAZY: Target evaluation is referentially transparent, which enables maximal laziness. Side effects (like deployments) are explicitly declared in a different way.
Concrete examples, please
To see and try out iwant
in action, please git clone iwant-demo, a multi-module project that uses iwant
as the build system to demonstrate several of its features. Feel free to clone it, to try things out, or even to develop new things for others to learn and reuse.
Also, some more details, like taking iwant
into use, are documented in the tutorial (in a documentation driven manner by descript).
About the project
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.
For news please see the github project page.
You can track the project progress and plans in the
backlog.txt.
iwant
- developed by Ville Oikarinen since 2009