是否有可能覆盖已经为父 POM 中的配置文件定义的插件的配置?

在我的项目的 POM 父文件中,我有一个这样的概要文件,它定义了一些对这个项目有用的配置(这样我就不能去掉这个父 POM) :

<profile>
<id>wls7</id>
...
<build>
<plugins>
<!-- use java 1.4 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<fork>true</fork>
<source>1.4</source>
<target>1.4</target>
<meminitial>128m</meminitial>
<maxmem>1024m</maxmem>
<executable>%${jdk14.executable}</executable>
</configuration>
</plugin>
</plugins>
</build>


...
</profile>

但是在我的项目中,我只是想覆盖 maven 编译器插件的配置,以便使用 jdk5而不是 jdk4来编译测试类。

这就是为什么我在项目的 POM 中做了这个部分:

<profiles>
<profile>
<id>wls7</id>
<activation>
<property>
<name>jdk</name>
<value>4</value>
</property>
</activation>
<build>
<directory>target-1.4</directory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>my-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<fork>true</fork>
<executable>${jdk15.executable}</executable>
<compilerVersion>1.5</compilerVersion>
<source>1.5</source>
<target>1.5</target>
<verbose>true</verbose>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
...
</profiles>

但是没有用。

我甚至尝试在 POM 的常规插件部分覆盖配置(我的意思是,不是针对特定的配置文件,而是针对整个 POM)。

有什么问题吗?

为了澄清我的一些要求:

  • 我不想摆脱父母 POM 和定义的概要文件(wls7) inside it (since I need many and many 属性、配置、 ...)和 that is not the process in my 公司。
  • A solution based on duplicating 父 POM 及/或配置文件 内部定义是不好的 因为如果
    父母 POM 改变了什么,我
    必须在我的报告中提到。

这只是一个继承问题(扩展或覆盖概要文件,来自上层 POM 的配置) ,因此我认为 Maven2应该可以做到这一点。

91149 次浏览

您是否尝试过停用 wls7配置文件(因为 maven 2.0.10) :

从 Maven 2.0开始,10,1或者 更多配置文件可以使用 命令行的前缀 标识符 '!' or '-' as shown below:

mvn groupId:artifactId:goal -P !profile-1,!profile-2

这可以用来停用 标记为 activeByDefault 或 不然的话 activated through their activation 配置。

And then add your configuration in a profile with a different name or directly in your pom.xml.

可以通过将 combine.self="override"属性添加到 pom 中的元素来重写来自父 pom 的配置。

尝试将你的插件配置改为:

    <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>my-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration combine.self="override">
<fork>true</fork>
<executable>${jdk15.executable}</executable>
<compilerVersion>1.5</compilerVersion>
<source>1.5</source>
<target>1.5</target>
<verbose>true</verbose>
</configuration>
</execution>
</executions>
</plugin>

有关重写插件的更多信息,请参见: http://maven.apache.org/pom.html

我也有同样的问题。默认情况下,我的 maven war 插件排除了一个 html 文件。但是在我的验收测试文件中,我希望包含这个文件。所以当我再次添加 Mavenwar 插件时,它没有覆盖默认值。

To resolve this issue i passed in the combine.self attribute and worked fine.

默认构建:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<packagingExcludes>swagger-ui/client.html</packagingExcludes>
</configuration>
</plugin>

验收测试简介:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration combine.self="override"/>
</plugin>