Maven自定义插件本质是创建绑定到标准生命周期阶段(如package)的Mojo,通过@Mojo注解或pom.xml中executions配置实现绑定;需设packaging为maven-plugin,引入maven-plugin-api和maven-plugin-annotations依赖,并支持参数注入与MavenProject上下文访问。

在 Maven 中编写自定义生命周期插件,本质是创建一个可绑定到标准生命周期阶段(如 package、compile)的 Mojo,并通过注解或配置明确其执行时机和行为。它不是新增生命周期,而是扩展已有生命周期的能力——让构建过程自动执行你定义的逻辑。
明确 Mojo 与生命周期阶段的绑定方式
Maven 默认生命周期(default、clean、site)本身不可修改,但每个阶段可以绑定任意数量的插件目标(goal)。自定义插件的核心就是把你的 Mojo 绑定到某个 phase:
- 用
@Mojo(defaultPhase = LifecyclePhase.PACKAGE)直接声明默认绑定阶段 - 不加
defaultPhase时,需在使用方项目的pom.xml中显式配置绑定:<plugin> <groupId>com.example</groupId> <artifactId>my-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>package</phase> <goals><goal>assemble-configs</goal></goals> </execution> </executions> </plugin> - 一个 Mojo 可被多次绑定到不同 phase,也可不绑定、仅作手动调用(如
mvn my:deploy)
项目结构与关键配置必须到位
自定义插件不是普通 Java 项目,Maven 会按特殊规则识别和加载它:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
pom.xml中<packaging>必须设为maven-plugin - 必须引入两个核心依赖:
-
org.apache.maven:maven-plugin-api(提供Mojo接口和上下文) -
org.apache.maven.plugin-tools:maven-plugin-annotations(提供@Mojo、@Parameter等注解,provided范围)
-
- 推荐使用
maven-plugin-plugin插件生成插件描述符(plugin.xml),避免运行时报 “No plugin descriptor found”
参数注入与构建上下文访问是实用关键
Mojo 不是孤立运行的,它能天然获取 Maven 构建环境信息:
立即学习“Java免费学习笔记(深入)”;
- 用
@Parameter(defaultValue = "${project}")注入MavenProject对象,可读取pom.xml内容、模块路径、依赖列表等 - 用
@Parameter(defaultValue = "${session}")获取MavenSession,用于跨模块协调或判断构建模式(如是否跳过测试) - 自定义参数用
@Parameter(property = "myplugin.env"),支持命令行传参:mvn package -Dmyplugin.env=prod - 日志统一用
getLog().info("..."),输出会自然融入 Maven 控制台流
验证与调试要分两步走
插件开发容易卡在“写了但没执行”,验证链路要清晰:
- 先本地安装:在插件项目中执行
mvn clean install,确认target/classes/META-INF/maven/plugin.xml存在且 goal 正确注册 - 再在业务项目中引用并触发:要么配置
<executions>让它随生命周期自动跑;要么直接命令行调用:mvn com.example:my-maven-plugin:1.0.0:assemble-configs - 若未执行,优先检查:
plugin.xml是否生成、goal 名是否拼写一致、绑定 phase 是否已被其他插件覆盖、Maven 版本兼容性(如注解版本与 maven-plugin-plugin 版本匹配)

















