We started out with a pretty simple but workable ant script. However, I came across Maven and was intrigued by its promises: standard targets derived from a project descriptor and sparse property overrides, automatic (slightly less than attractive, but informative) site generation, and a host of plugins that will grant us instant functionality as needed.
How deluded I was.
While I (more-or-less) got the above, these features were tightly coupled with the following:
- crappy or non-existent documentation
- poor performance and memory utilization
- meaningless error messages
- poor tool integration
My current favorite issue with Maven is that it never releases memory acquired as part of a unit test until the build is done. So each unit test keeps leaking memory into the next test. Our build runs out of memory if it tries to do anything besides run unit tests. So, for awhile, the workaround was to have a two-step build process: build the product, then run unit tests. This was less than convenient, and people got out of the habit of running unit tests.
We’ve found another workaround for this.
This causes each unit test to be forked into its own java process. But then our unit tests take over 4 times as long to complete. And its not like unit tests in Maven were fast to begin. For comparison purposes, IDEA can run all of our tests (including our integration tests that actually hit the database) in less time than it takes for the maven build to run just the unit tests (and this is with forking turned off).
Oh, if only I had listened to those that had gone before me.