Builds Are Complex So Choose Your Tools Wisely
While preparing for Javarsovia 2010 Gradle speech I tried to list all things that are performed during builds. I remembered few last projects of mine and tried to categorize various actions that happen during their build. The result surprised me - seems like today's builds do a lot of very different stuff.
This mindmap was created with XMind tool. I don't claim it be complete!
Click to see the larger version.
Random Notes and Comments
- First of all the creation of JAR, WAR or EAR is just a beginning. There is a plethora of other activities performed by build tools that are equally important as creation of the artifacts.
- Testing is a huge subject. Apart from running unit tests (which is now a standard and works fine out-of-the-box with any modern build tools) builds deal with all other kinds of tests. Setting of testing environment might be the most complicated part of a build.
- Builds are influenced by the way the way you develop code and deploy artifacts to devel, testing and production environments. They generate appropriate properties files.
- From my experience current projects are always multi-module. This is propelled by common sense and best practices (e.g. separate backend and frontend) and by the rising popularity of modularization frameworks, i.e. OSGi. This makes build way more complicated and influences almost every aspect of build - from compilation (dependencies between projects) through documentation (would you like a javadoc grouping API of all modules?) to SCM operations.
- Documentation is moving from static towards dynamically generated. Not only in terms of various formats (e.g. HTML, PDF, ePub) but also because for example snippets of test code are injected into userguides in order to assure the documentation is always up-to-date.
- Some tasks are shared between build tools and CI servers. For example code quality checks can be embedded into build script or configured independently on CI server (i.e. using Sonar)
- Build tools help in development - by allowing to start a new project quickly and by the generation of IDE-specific files
And the Moral is...
The moral is obvious - your build tool should be able to help you with every aspect of build process. These days builds are complex and require a lot of flexibility.