Maven如何为相同execution id的插件执行生成有效配置?
Maven 插件 execution 下 goals 节点合并规则和普通 configuration 节点不同,这是你看到两个goal共存的核心原因:
- 普通集合类配置节点(比如
<includes>)默认的合并策略是子节点覆盖父节点的同名字段:如果子POM配置了和父POM同名的集合节点,父节点的内容会被完全替换,所以你看到合并后的<includes>仅保留了子POM的AA。 - 同一id的
<execution>下的<goals>节点默认合并策略是追加而非覆盖:Maven通过execution的id匹配父子POM中的插件执行项,当id完全一致时才会合并配置,且子POM配置的goal会追加到父POM的goal列表后,不会直接替换父POM的内容,所以合并后同时存在check和sort两个goal。如果execution id不同,会被识别为两个独立的执行项,不会合并。
如果需要让子POM的goal完全覆盖父POM的配置,只需要在子POM的<goals>节点添加combine.self="override"属性即可,示例如下:
<executions> <execution> <id>the_same_id</id> <phase>process-test-classes</phase> <goals combine.self="override"> <goal>check</goal> </goals> </execution> </executions>
你观察到的其他合并表现都符合Maven默认规则:execution的phase、普通单值配置项默认子POM配置覆盖父POM,子POM未配置的单值项会继承父POM配置,所以phase从父POM的process-sources变成了子POM的process-test-classes,<lineEnding>从父POM继承了LF配置,<includes>被子POM的配置完全替换。
内容的提问来源于stack exchange,提问作者Piotr Michalczyk
相关产品推荐
相关产品推荐

