"Extend" parent pom <build> 在 child pom 中添加一些我想执行的附加插件

"Extend" parent pom <build> in a child pom to add some additional plugins I would like to execute

我目前使用的 parent <build> 对我 75% 的项目都很方便。
它相当完整。我们称它为 'A' :

    <build>
        <plugins>
            <!-- Bug Eclipse temporaire -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.1</version>
            </plugin>

            <!-- Compilation classique -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <charset>${project.build.sourceEncoding}</charset>
                    <docencoding>${maven.test.compile.encoding}</docencoding>

                    <forkMode>once</forkMode>
                    <argLine>${maven-compiler.memory}</argLine>
                </configuration>
            </plugin>

            <!-- Plugin Surefire : exécution tests unitaires -->
            <!-- Tous les tests sauf ceux débutant par IT* -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>

                <configuration>
                    <skipTests>${skip.unit.tests}</skipTests>

                    <excludes>
                        <exclude>**/IT*.java</exclude>
                    </excludes>

                    <configuration>
                        <argLine>-Xmx20g</argLine>
                    </configuration>
                </configuration>
            </plugin>

            <!-- Plugin Failsafe : exécution de tests d'intégration -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>

                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>

                        <configuration>
                            <argLine>-Xmx20g</argLine>
                        </configuration>
                    </execution>
                </executions>

                <configuration>
                    <skipTests>${skip.integration.tests}</skipTests>
                </configuration>
            </plugin>

            <!-- Javadoc plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>

                <configuration>
                    <charset>UTF-8</charset>
                    <docencoding>UTF-8</docencoding>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- Source plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
            </plugin>

            <!-- Release -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
            </plugin>

            <!-- Deploy plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

然而,从一个子项目开始,对于下面的许多模块,其中 25%,需要通过执行几个插件来扩展它们的 <build>,而 parent pom.xml 应该继续执行。他们在这里,在 'B' 部分:

    <build>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>4.4.0</version>
                
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        
                        <configuration>
                            <recompileMode>all</recompileMode>
                            <sourceDir>src/main/scala</sourceDir>
                        </configuration>
                    </execution>
                    
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                        
                        <configuration>
                            <recompileMode>all</recompileMode>
                            <testSourceDir>${project.basedir}/src/test/scala</testSourceDir>
                        </configuration>
                    </execution>
                </executions>
                
                <configuration>
                    <scalaVersion>${scala.version}</scalaVersion>
                </configuration>
            </plugin>
        </plugins>
    </build>

我希望他们将它们添加到 parent pom 已经执行的其他人中。

如何避免 pom.xmlA + B 插件堆叠?我有办法在 child pom.xml 到 'patch' 我的 parent <build> 中使用额外的插件我想要它执行 ?

换句话说,我不想在我的child pom 中有这个:

    <build>
        <plugins>
            <!-- Bug Eclipse temporaire -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.1</version>
            </plugin>

            <!-- Compilation classique -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <charset>${project.build.sourceEncoding}</charset>
                    <docencoding>${maven.test.compile.encoding}</docencoding>

                    <forkMode>once</forkMode>
                    <argLine>${maven-compiler.memory}</argLine>
                </configuration>
            </plugin>

            <!-- Plugin Surefire : exécution tests unitaires -->
            <!-- Tous les tests sauf ceux débutant par IT* -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>

                <configuration>
                    <skipTests>${skip.unit.tests}</skipTests>

                    <excludes>
                        <exclude>**/IT*.java</exclude>
                    </excludes>

                    <configuration>
                        <argLine>-Xmx20g</argLine>
                    </configuration>
                </configuration>
            </plugin>

            <!-- Plugin Failsafe : exécution de tests d'intégration -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>

                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>

                        <configuration>
                            <argLine>-Xmx20g</argLine>
                        </configuration>
                    </execution>
                </executions>

                <configuration>
                    <skipTests>${skip.integration.tests}</skipTests>
                </configuration>
            </plugin>

            <!-- Javadoc plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>

                <configuration>
                    <charset>UTF-8</charset>
                    <docencoding>UTF-8</docencoding>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- Source plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
            </plugin>

            <!-- Release -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
            </plugin>

            <!-- Deploy plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>4.4.0</version>
                
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        
                        <configuration>
                            <recompileMode>all</recompileMode>
                            <sourceDir>src/main/scala</sourceDir>
                        </configuration>
                    </execution>
                    
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                        
                        <configuration>
                            <recompileMode>all</recompileMode>
                            <testSourceDir>${project.basedir}/src/test/scala</testSourceDir>
                        </configuration>
                    </execution>
                </executions>
                
                <configuration>
                    <scalaVersion>${scala.version}</scalaVersion>
                </configuration>
            </plugin>
        </plugins>
    </build>

目前,根据我的所见所闻,在 child pom.xml 中创建 <build> 部分会完全覆盖 [=56= 的 <build> 部分] pom.

您无需重复父 POM 中的任何内容。父子 POM 的构建部分会自动合并,因此在子 POM 中指定 附加 插件或执行就足够了。

如果您查看有效的 POM(例如通过您的 IDE 或使用 maven 帮助插件),您可以看到 <build> 部分的合并版本。