Maven plugin inheritance from pluginManagement

build, maven, maven-2

Solution

In order to achieve the merge behavior you should put the `maven-ear-plugin` under the `plugins` tag in the parent `pom` (rather than under `pluginManagement`).

Parent `pom`:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <modules>
                    <jarModule>
                        <groupId>com.test</groupId>
                        <artifactId>artifact1</artifactId>
                    </jarModule>
                    <jarModule>
                        <groupId>com.test</groupId>
                        <artifactId>artifact2</artifactId>
                    </jarModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

EDIT

After OP's clarified projects structure: the attribute `combine.children="append"` on the `modules` element, in the child projects:

<modules combine.children="append">
    <jarModule>
        <groupId>com.test</groupId>
        <artifactId>artifact3</artifactId>
    </jarModule>
</modules>

The parent should still define the plugin only in `pluginManagement`.

Problem

there I have a parent pom.xml which defines the the default configuration for maven-ear-plugin ``` <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <version>2.8</version> <configuration> <modules> <jarModule> <groupId>com.test</groupId> <artifactId>artifact1</artifactId> </jarModule> <jarModule> <groupId>com.test</groupId> <artifactId>artifact2</artifactId> </jarModule> </modules> </configuration> </plugin> </plugins> </pluginManagement> ``` In the child pom, I defined the maven-ear-plugin in the `<plugins>` section ``` <plugin> <artifactId>maven-ear-plugin</artifactId> <executions> <execution> <id>default-ear</id> <phase>package</phase> <goals> <goal>ear</goal> </goals> <configuration> <earSourceDirectory>EarContent</earSourceDirectory> <defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir> <modules> <jarModule> <groupId>com.test</groupId> <artifactId>artifact3</artifactId> </jarModule> </modules> </configuration> </execution> </executions> </plugin> ``` My intention is to include all 3 jar files artifact1, artifact2 and artifact3 in the ear. However, after the build, only artifact3 defined in child pom.xml is included. So it looks like by default the `<modules>` definition in the child pom.xml overwrites what's defined in the parent pom, instead of merge them together. In fact, if I remove the whole `<modules>` section in the child pom.xml, the artifact1 and artifact2 will be included after the build. My question is whether there is a way to include all jar modules defined in parent pom and child pom. I have several ear projects and all of them need to include the same set of jar modules plus a few jar modules of their own. I am trying to move the common set of jar modules to the parent so that they are not repeated in each child pom.xml. Update to clarify my projects relations: ``` parent pom.xml (define maven-ear-plugin in the pluginManagement section) -- project1 pom.xml (multi-module project) -- myJar-proj1 -- myWeb-proj1 -- myEar-proj1 (define maven-ear-plugin in the <build> section) -- project2 pom.xml (multi-module project) -- myJar-proj2 -- myWeb-proj2 -- myEar-proj2 (define maven-ear-plugin in the <build> section) ```

Original source