全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-23 10 分钟 ✍️ juanwangdev

插件目标绑定机制

插件目标可绑定到生命周期阶段,阶段触发时执行目标。

绑定概念

Phase 与 Goal

XML
生命周期阶段 (Phase)
    ↓ 绑定
插件目标 (Goal)

示例:
package 阶段 → jar:jar

默认绑定

default 生命周期默认绑定

阶段插件:目标
process-resourcesresources:resources
compilecompiler:compile
process-test-resourcesresources:testResources
test-compilecompiler:testCompile
testsurefire:test
packagejar:jar / war:war
installinstall:install
deploydeploy:deploy

packaging 决定绑定

packagingpackage 阶段绑定
jarjar:jar
warwar:war
maven-pluginplugin:addPluginArtifactMetadata

自定义绑定

基本语法

XML
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-source-plugin</artifactId>
  <version>3.2.1</version>
  <executions>
    <execution>
      <id>attach-source</id>
      <phase>package</phase>  <!-- 绑定到 package 阶段 -->
      <goals>
        <goal>jar</goal>       <!-- 执行的目标 -->
      </goals>
    </execution>
  </executions>
</plugin>

绑定元素

元素说明
phase生命周期阶段
goals目标列表

非默认阶段绑定

绑定到非默认阶段

XML
<!-- 在 verify 阶段执行打包 -->
<execution>
  <phase>verify</phase>
  <goals>
    <goal>jar</goal>
  </goals>
</execution>

绑定到 initialize 阶段

XML
<!-- 项目初始化时执行 -->
<execution>
  <phase>initialize</phase>
  <goals>
    <goal>exec</goal>
  </goals>
</execution>

多目标绑定

多个目标同一阶段

XML
<execution>
  <phase>package</phase>
  <goals>
    <goal>jar</goal>
    <goal>test-jar</goal>
  </goals>
</execution>

不同阶段不同目标

XML
<executions>
  <execution>
    <id>compile-hook</id>
    <phase>compile</phase>
    <goals>
      <goal>run</goal>
    </goals>
  </execution>
  <execution>
    <id>package-hook</id>
    <phase>package</phase>
    <goals>
      <goal>run</goal>
    </goals>
  </execution>
</executions>

绑定顺序

同阶段多插件

Bash
<!-- package 阶段绑定 -->
<plugins>
  <!-- 1. jar 插件 -->
  <plugin>
    <artifactId>maven-jar-plugin</artifactId>
  </plugin>

  <!-- 2. source 插件 -->
  <plugin>
    <artifactId>maven-source-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

执行顺序:jar:jar → source:jar

阶段触发目标执行

触发链

Bash
执行 mvn package:

validate
↓
compile(触发 compiler:compile)
↓
test(触发 surefire:test)
↓
package(触发 jar:jar, source:jar)
↓
完成后

查看绑定

使用 help:describe

XML
mvn help:describe -Dcmd=package

输出:

Bash
package' is a phase corresponding to this plugin:
maven-jar-plugin:jar

查看插件目标绑定

XML
mvn help:describe -Dplugin=maven-jar-plugin -Ddetail

无阶段绑定

直接执行目标

text
<!-- 不绑定阶段,需手动执行 -->
<plugin>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-deps</id>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <!-- 无 phase,手动执行 -->
    </execution>
  </executions>
</plugin>

手动执行:

text
mvn dependency:copy-dependencies@copy-deps

前置/后置阶段

pre/post 阶段

text
<!-- pre-clean 阶段执行 -->
<execution>
  <phase>pre-clean</phase>
  <goals>
    <goal>run</goal>
  </goals>
</execution>

<!-- post-package 自定义(不存在) -->
<!-- 只能绑定到现有阶段 -->

目标绑定最佳实践

推荐做法

做法说明
遵循默认绑定不重复绑定内置目标
合理选择阶段目标性质匹配阶段
明确 id便于调用和调试

常见自定义绑定

目标推荐阶段
source:jarpackage
javadoc:jarpackage
dependency:copy-dependenciespackage
exec:execinitialize

要点总结

  • phase-goal 绑定决定阶段触发目标
  • packaging 决定默认绑定
  • executions 自定义绑定
  • phase 指定绑定阶段
  • goals 指定执行目标
  • 同阶段多目标按声明顺序执行
  • 无 phase 需手动执行

📝 发现内容有误?点击此处直接编辑

← 上一篇 插件执行配置与过滤
下一篇 → 插件配置高级用法
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库