Using POM Inheritance

Maven projects are completely described by a Project Object Model (POM), and when you break a project into subprojects, each subproject will have its own POM. Because a series of related projects most likely originated from the same organization, have the same developer team, and use a similar set of dependencies, related project POMs will tend to contain duplicate data. From the previous example, core would contain the same developers element as web, which would contain the same developers element as the packager project. Configuration duplication is just as bad as code duplication, and to reduce the amount of work to maintain related POMs you'll need to have each POM inherit from a super-POM. When a project's POM inherits from a common POM, subprojects need to specify only how they're different from the main project. Maven supports project inheritance, which means that any subproject can inherit from its parent's project.xml, maven.xml, and properties files (project.properties and build.properties).

How do I do that?

Figure 3-2 shows the four subprojects' project.xml files, along with a new common/ directory that you have created. The common/ directory contains the shared project.xml and project.properties files you want all subprojects to inherit from. You can put in the common/ directory any Maven build-related file you wish to share between your Maven subprojects; this includes project.properties, project.xml, and maven.xml.

Figure 3-2. Maven build files ...

Get Maven: A Developer's Notebook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.