You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven插件goal是否必须配置在execution标签内才会执行?

核心结论

Maven插件的goal是否需要显式配置在<execution>标签内才会执行,和goal本身没有必然关系,核心判断依据是:该goal是否被当前项目的打包类型(<packaging>配置值)对应的默认构建生命周期绑定到了对应阶段。

针对maven-jar-plugin场景的具体解释
  • 关于jar goal:
    当项目<packaging>值为jar(这也是Maven项目的默认配置值)时,Maven内置的生命周期规则已经默认把maven-jar-plugin:jar绑定到了构建流程的package阶段。只要构建执行到package阶段,这个goal就会自动触发,完全不需要额外写<execution>配置。
  • 关于test-jar goal:
    这个goal属于插件提供的可选扩展功能,没有被任何内置打包类型的默认生命周期绑定,Maven不会主动触发它,必须通过<execution>标签显式声明要执行这个goal、以及它绑定的构建阶段,才会在对应阶段运行,标准配置如下:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>test-compile</phase>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>
补充通用规则
  • 不同打包类型的默认绑定规则完全不同:如果把项目<packaging>改成pom,jar goal就不会自动执行,因为pom类型的构建流程默认没有绑定这个goal;如果是war类型的项目,默认绑定到package阶段的是maven-war-plugin:war goal,不会触发jar插件的jar goal。
  • 哪怕是已经被默认绑定的goal,也可以通过写<execution>调整执行逻辑:比如修改绑定的phase、传入自定义参数、甚至配置多个execution让同一个goal在不同阶段多次执行,自定义配置会和默认绑定逻辑叠加生效,不会互相覆盖。
  • 如果要禁用某个默认绑定的goal,可以匹配它的默认execution id(命名规则为default-<goal名>,比如jar goal对应的默认id就是default-jar),在插件配置里把这个execution的phase设为none即可跳过默认执行。

内容的提问来源于stack exchange,提问作者askaquestion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:31:05