必须绕过maven生命周期直接测试mojo类本身,以隔离逻辑、断言结果并覆盖参数解析与项目上下文初始化;需引入maven-plugin-testing-harness依赖,继承abstractmojotestcase,正确配置模拟项目资源并调用lookupmojo和execute完成验证。

要验证你开发的自定义 Maven 插件在真实构建流程中行为正确,必须绕过 Maven 生命周期直接测试 Mojo 类本身,否则无法隔离插件逻辑、难以断言执行结果、也无法覆盖参数解析与项目上下文初始化等关键路径。
准备测试依赖
在插件模块的 pom.xml 的 <dependencies></dependencies> 中添加测试 harness:
这个依赖提供 AbstractMojoTestCase 基类和模拟项目工具链,是测试 Mojo 的基础。不引入它,后续所有测试类都无法继承和调用核心方法。
编写 Mojo 测试类
创建 src/test/java/com/yourcompany/maven/MyCustomMojoTest.java:
继承 AbstractMojoTestCase,重写 setUp() 方法,在其中调用 super.setUp() —— 这一步必须放在方法开头,否则后续 lookupMojo() 会抛出 NullPointerException。
在测试方法中,先用 getProject(new File("src/test/resources/unit/simple-project")) 加载一个预置的模拟 Maven 项目结构;【该目录必须存在且包含有效的 pom.xml 和 minimal src/main/java 结构】
接着调用 lookupMojo("goal-name", basedir) 获取 Mojo 实例,其中 "goal-name" 必须与插件 plugin.xml 或注解中声明的 goal ID 完全一致,大小写敏感,拼错则返回 null。
最后调用 mojo.execute() 执行,并对输出文件、日志内容或副作用(如生成的 target 文件)做断言。
配置模拟项目资源
在 src/test/resources/unit/simple-project 下放置最小可行项目:
包含 pom.xml(声明 <packaging>jar</packaging> 即可)、空的 src/main/java 目录、以及你的 Mojo 预期读取的任意配置文件(如 config.yaml)。
这一步不能跳过。Maven 插件测试 harness 不会自动创建项目骨架,getProject() 传入的路径若无有效 pom.xml,会直接抛出 IOException 并中断测试。
运行插件单元测试
在项目根目录执行:
mvn test -Dtest=MyCustomMojoTest
该命令仅运行指定测试类,避免因其他测试失败干扰插件逻辑验证。若需调试,可在 IDEA 中右键测试类 → Run,IDE 会自动识别并注入 harness 环境。











