Can’t sleep… It’s 3:30AM EST and I can’t sleep! So, I figured I’d write about my recent battles with Maven, Anthill, and Junits.
I’ve recently converted a project from an Ant build over to a Maven build. The motivation for doing this was that the project structure was starting to get a little messy and the development teams could benefit from having a well defined project structure for future development efforts not to mention dependency management. While making the conversion, I decided to turn on junit reporting as this is standard practice in any healthy development project. Since our build environment is backed by Anthill, I needed to emit junit report xml files so that Anthill could dutifully package junit reports for distribution to a mailing list. I also wanted to have Anthill fail the build if a junit failed or errored out . Sounds simple right?
Unfortunately, I encountered a few hurdles in getting Maven to play nicely with junits and getting Anthill to play nicely with the Maven way of doing things. The problem was that:
- My project is a multi-module structure. Each time unit tests are run, the junit report xml is dumped into the respective module’s target directory. Anthill wants report xml aggregated up to a chosen directory.
- I want my build to fail if a junit error/failure is detected but continue to run.
- I don’t want to use site:site since this takes forever and generates artifacts I don’t care about.
In order to achieve my goal, I needed to fall back to Ant tasks. The Ant tasks that follow simply concatenates the generated junit test results into one file. After concatenation, I load the file into a Ant properties so that I can search for key indicators of failure or errors. If these are present, I flag the build as a fail and let this bubble up to Anthill to fail the build.
Anyway… This isn’t the most elegant solution, but it works. Hope this helps someone.
org.apache.maven.plugins maven-antrun-plugin test-reports install run