"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.xml
与 A + 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>
部分的合并版本。
我目前使用的 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.xml
与 A + 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>
部分的合并版本。