在<build>子pom中"Extend"父pom以添加一些我想执行的其他插件



我目前使用的父<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>,而父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已经执行的其他程序中。

如何避免使用a+B插件堆叠的pom.xml?我有办法在子pom.xml中用我希望它执行的附加插件">补丁"我的父<build>吗?

换句话说,我不想在我的孩子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中创建<build>部分将完全覆盖父级pom的<build>部分。

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

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

最新更新