Maven: Lifecycle Hooks Lead To Infrequent Integrations 📎
You could build, test and deploy the entire Java EE Application and even create a working application server from scratch with a single mvm clean install
command. The only problem is: it will take forever and you will have to repeat the whole process over and over again, even if you were only interested in particular build steps.
If mvm clean install
would just execute the unit tests, your feedback will be significantly faster. Instead of waiting hours, you get the first results in seconds.
A series of composable jobs, each executing a goal or maven plugin, could be realized with http://jenkins-ci.org, or a simple shell / batch script on the developer's machine.
Instead of executing all plugins at once by hooking them to the lifecycle, you could implement a series of chained together jobs. E.g.
- Job:
mvm clean install
(mvn clean package
suffices as well) - Job:
mvn failsafe:integration-test
- Job: server setup
- Job: deployment
- Job: system test execution
- Job: quality assurance
- Job: promotion
- Job: tagging / release
- ...
The faster the feedback, the more valuable it gets. A monolithic mvn clean install
leads to too long builds, less feedback and becomes less valuable for Continuous Integration. CI degrades to nightly builds…
Just start with an essential setup essential and not with a super-pom.
[See also an in-depth discussion in the "Real World Java EE Night Hacks--Dissecting the Business Tier" book, page 136 in, chapter "Continuous Integration and QA"]
See you at Java EE Workshops at MUC Airport (Effective JavaEE)!