必须使用maven-archetype-plugin模板创建自定义Maven插件项目,添加maven-plugin-annotations和maven-plugin-api依赖,编写带@Mojo注解的Mojo类,配置maven-plugin-plugin指定goalPrefix,最后执行mvn clean install安装到本地仓库。

你想让 Maven 在构建时自动执行一段专属逻辑,比如生成版本文件、校验代码规范、或清理特定临时目录,但现有插件无法满足——这时必须从零开发一个自定义 Maven 插件。
创建插件项目骨架
在 IDEA 中新建 Maven 项目 → 选择 maven-archetype-plugin 模板(不是普通 archetype)→ 填写 groupId、artifactId、version。这一步直接生成符合插件规范的目录结构和基础 pom.xml,省去手动配置 packaging 的风险。
【必须选 maven-archetype-plugin,选错模板会导致后续 compile 失败】
生成后检查 pom.xml 是否含 <packaging>maven-plugin</packaging>,若没有请立即补上并刷新 Maven 项目。
引入核心依赖
打开 pom.xml,在 <dependencies> 中添加两项:
方法一:基础注解支持<dependency><groupId>org.apache.maven.plugin-tools</groupId><artifactId>maven-plugin-annotations</artifactId><version>3.6.4</version><scope>provided</scope></dependency>
方法二:运行时 API 支持<dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>3.8.6</version></dependency>
注意:maven-plugin-annotations 的 scope 必须为 provided,否则打包后会污染使用者项目类路径。
编写 Mojo 类
第一步:在 src/main/java 下新建包路径,例如 io.example.myplugin;
第二步:新建 Java 类 VersionGeneratorMojo,继承 AbstractMojo;
第三步:添加 @Mojo(name = "generate-version") 注解,name 值将作为命令行调用的目标名;
第四步:声明参数字段并用 @Parameter 标记,例如:@Parameter(defaultValue = "${project.build.directory}", readonly = true)<br>private File outputDir;
这个表达式会自动注入当前项目的 target 目录路径,无需硬编码。
第五步:重写 execute() 方法,在其中实现业务逻辑——比如创建 Version.txt 并写入当前时间戳。务必用 getLog().info("...") 输出日志,这是唯一标准输出方式。
配置插件元信息
在 pom.xml 的 <build><plugins> 中加入 maven-plugin-plugin:
<plugin><br>
<groupId>org.apache.maven.plugins</groupId><br>
<artifactId>maven-plugin-plugin</artifactId><br>
<version>3.6.4</version><br>
<configuration><br>
<goalPrefix>example</goalPrefix><br>
</configuration><br></plugin>
其中 goalPrefix 决定了插件简写前缀:安装后可用 mvn example:generate-version 调用,而不是冗长的全坐标。
构建并安装到本地仓库
执行 mvn clean install;
成功后,插件 JAR 会出现在 ~/.m2/repository/io/example/mykit-maven-plugin/1.0.0-SNAPSHOT/ 目录下;
此时插件已可被其他项目引用——无需上传私服,本地验证阶段直接生效。


















