Whether you love it or hate it, Maven is the key build tool for many Java projects. Its opinionated “convention over configuration” design provides Maven with a lot of its power, but it can be very limiting at times. Maven’s opinion on how project “versions” should be managed and released makes it very difficult to implement Continuous Deployment or Delivery.
The first stage in the Continuous Deployment pipeline is to build a binary artifact (jar, war or installer) as a release candidate. Later pipeline stages test the release candidate and can pass it on to the next stage in the pipeline if successful. Maven does not support the notation of a release candidate and to release a version Maven requires the artifact to be rebuilt, making implementing a pipeline difficult. This talk focuses on the basics of Continuous Deployment and how we built a Continuous Deployment pipeline using Maven. The presented solution is not tied to a particular Continuous Integration server and the build process can still be used productively by developers on their workstations.
Video producer: http://www.jdays.se/