【问题标题】:"Extend" parent pom <build> in a child pom to add some additional plugins I would like to execute在子 pom 中“扩展”父 pom <build> 以添加一些我想执行的附加插件
【发布时间】:2020-09-29 16:52:02
【问题描述】:

我目前正在使用父级 &lt;build&gt;,这对我 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%,需要通过执行少数插件来扩展它们的 &lt;build&gt;,而父 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>

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

如何避免 pom.xmlA + B 插件堆叠?我有办法让孩子pom.xml 'patch' 我的父母&lt;build&gt; 使用我希望它执行的其他插件吗?

换一种说法,我不想在我的孩子 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>

目前,根据我所见、了解和经验,在子 pom.xml 中创建 &lt;build&gt; 部分会完全覆盖父 pom 的 &lt;build&gt; 部分。

【问题讨论】:

    标签: maven plugins build


    【解决方案1】:

    您无需重复父 POM 中的任何内容。 parent 和 child 的 build 部分会自动合并,因此在 child POM 中指定 additional 插件或执行就足够了。

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

    【讨论】:

    • 你的权利!这是另一个导致我对自己的问题进行错误分析的问题!谢谢
    猜你喜欢
    • 2018-04-12
    • 2021-07-12
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多