Maven:是否可以覆盖已经为父POM中的configuration文件定义的插件的configuration

在我的项目的POM父文件中,我有这样一个configuration文件来定义一些对这个项目有用的configuration(所以我不能摆脱这个父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-compiler-plugin的configuration,以便使用jdk5而不是jdk4来编译testing类。

这就是为什么我在我的项目的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的常规插件部分(我的意思是,不是一个特定的configuration文件,但对于我的整个聚甲醛)的configuration。

可能是什么问题呢 ?

澄清我的一些要求:

  • 我不想摆脱父POM和其中定义的configuration文件(wls7)(因为我需要许多和许多属性,configuration…),这不是我公司的过程。
  • 基于复制父POM和/或其内部定义的configuration文件的解决scheme是不好的。 既然如此负责
    父母POM改变一些事情,我
    将不得不在我的报告。

这只是一个inheritance问题(扩展或覆盖configuration文件,来自上层POM的configuration),所以我认为应该可以使用maven2。

通过将combine.self="override"属性添加到您的pom中的元素,可以完成父pom的重写configuration。

尝试将您的插件configuration更改为:

  <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文件。 但在我的验收testingconfiguration文件,我想这个文件包括在内。 所以当我再次joinMaven War插件时,它并没有覆盖默认值。

为了解决这个问题,我传入了combine.self属性并正常工作。

默认版本:

 <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> 

验收testing简介:

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

你尝试去激活wls7configuration文件(自maven 2.0.10):

从Maven 2.0.10开始,可以使用命令行来禁用一个或多个configuration文件,方法是在它们的标识符前面添加字符'!' 或' – '如下所示:

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

这可用于停用标记为activeByDefault的configuration文件或将通过其激活configuration激活的configuration文件。

然后将您的configuration添加到名称不同的configuration文件中或直接添加到您的pom.xml