Jenkins® parses the Maven POM to gain a deeper understanding of your Maven project structure. This knowledge is then used to visualize the build results more nicely, such as showing all the modules in the UI, or figuring out dependencies among them.
Automatic Archiving of Reports
When you build Maven2 projects, Jenkins closely monitors what Maven is doing, and reacts automatically. For example, if Maven runs Surefire unit tests, that’ll be automatically captured. If Maven produces javadoc, that’s captured as well. Or if you run findbugs on Maven… you get the idea. All this happens without any additional configuration; you just tell Maven what goals to execute.
Mojo Execution Recording
Jenkins produces the record of what Maven did. It records every mojo that ran, the version of each, time it took to run and so on. This creates an unambiguous audit trail of your Maven execution – something the stand-alone Maven isn’t capable of doing, especially in the face of POM inheritance, automatic plugin version resolution and so on.
Parallel Module Builds
If your Maven project is a large multi-module project, you can tell Jenkins to build in parallel whenever it can. Jenkins will analyze the dependency between modules, and identify those modules that can be built in parallel. A large Maven project often consists of a large number of independent modules, so this generally achieves a noticeable performance improvement.
Incremental Module Builds
For a large Maven project, you can tell Jenkins to do incremental builds. In this mode, Jenkins will only build those modules that are affected by new commits. For example, if someone makes a change to moduleA/src/main/java/Foo.java, Jenkins will only build moduleA and other modules that depend on it. On a large Jenkins implementation, this results in a substantial performance improvement.
Automatic Snapshot Dependency Setup
If you have a Maven project that depends on other Maven projects via the so-called SNAPSHOT dependency and if those dependencies are also built on Jenkins, you can tell Jenkins to recognize those dependencies and set up a trigger accordingly. In this way, your downstream Maven projects are continuously built whenever their dependencies change, resulting in a faster error feedback time.