You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Maven生命周期阶段绑定自定义目标后执行顺序的技术问询

Maven生命周期阶段多目标绑定的执行顺序详解

这个问题我之前踩过坑,刚好可以给你讲明白~

首先直接给你核心结论:当多个目标绑定到同一个生命周期阶段时,执行顺序是先跑打包方式默认绑定的目标,再执行你在POM里手动配置的自定义目标,完全不是等整个生命周期(比如deploy阶段)结束才执行,而是在你绑定的那个阶段内部按顺序完成。

拿你举的例子来说:package阶段默认因为打包方式是jar,绑定了jar:jar目标。如果你把自定义插件的目标也绑定到package阶段,那当你执行mvn package时,流程是这样的:

  1. 先走完package之前的所有前置生命周期阶段(比如compile、test这些)
  2. 进入package阶段后,先执行默认绑定的jar:jar,生成对应的jar包
  3. 紧接着就会执行你手动绑定的自定义目标

举个POM配置的例子更直观:

<build>
  <plugins>
    <!-- 自定义插件绑定到package阶段 -->
    <plugin>
      <groupId>com.example</groupId>
      <artifactId>my-custom-plugin</artifactId>
      <version>1.0.0</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>my-custom-goal</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

运行mvn package时,你会在日志里看到jar:jar先执行,然后才是my-custom-plugin:my-custom-goal

另外补充个小细节:如果同一个阶段绑定了多个自定义目标,它们的执行顺序就是你在POM里配置的先后顺序,谁写在前面谁先跑。

总结一下,你之前的预期(自定义目标在jar:jar之后立即运行)其实是对的,官方文档的描述就是这个意思——默认绑定的目标先执行,然后才是POM里配置的自定义目标,完全不会等到整个生命周期结束。

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

火山引擎 最新活动