覆盖给定执行ID的Maven插件目标定义

时间:2011-07-20 09:56:52

标签: plugins configuration maven

似乎无法覆盖插件执行的目标定义。

假设我有一个Jetty的父配置,它定义了一个

                    <execution>
                        <id>start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>

现在我想在特定项目的本地运行爆炸

如果我尝试使用

覆盖本地项目中的父定义
                    <execution>
                        <id>start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run-exploded</goal>
                        </goals>
                    </execution>

然后我有效的pom变成了

                    <execution>
                        <id>start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run</goal>
                            <goal>run-exploded</goal>
                        </goals>
                    </execution>

我很惊讶,因为我一直以为它会覆盖。

这是Maven3中的新行为吗?

无论如何都要获得最重要的行为而不是当前行为?

2 个答案:

答案 0 :(得分:10)

我找到的方法是禁用继承配置并创建一个新配置:

                    <execution>
                        <id>start-jetty</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <id>my-start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run-exploded</goal>
                        </goals>
                    </execution>

答案 1 :(得分:2)

这是继承按照设计的方式工作。您应该考虑从父pom中删除您的jetty配置并将其放在配置文件中,或者尝试使用值为false的<inherited>元素,看看这是否适合您。