# first-maven-plugin **Repository Path**: devzl/first-maven-plugin ## Basic Information - **Project Name**: first-maven-plugin - **Description**: Custom Maven Plug-in - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-25 - **Last Updated**: 2022-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 2.6 自定义插件 [自定义插件项目]: F:\Java\unit-case-2022\test-maven\05-maven-project #### 1. 设定打包方式 ```xml maven-plugin ``` #### 2.引入依赖 > 方式一:将来在文档注释中使用注解 ```xml org.apache.maven maven-plugin-api 3.5.2 ``` > 方式二:将来直接使用注解 ```xml org.apache.maven.plugin-tools maven-plugin-annotations 3.5.2 ``` #### 3.创建 Mojo 类 Mojo 类是一个 Maven 插件的核心类。 Mojo 这个单词的意思是:Maven Old Java Object,其实 mojo 这个单词本身包含魔力;符咒(袋);护身符;(人的)魅力的含义,Maven 用 Mojo 是因为它是对 POJO 开的一个小玩笑。 > 方式一:Mojo 接口 每一个 Mojo 都需要实现 org.apache.maven.plugin.Mojo 接口。 ![images](data:image/png;base64,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) > 方式二:AbstractMojo 抽象类 我们实现 Mojo 接口比较困难,幸好可以继承 AbstractMojo,此时我们只要实现 execute() 这一个方法即可。 ```java public class MyHelloPlugin extends AbstractMojo { @Override public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("---> This is my first maven plugin. <---"); } } ``` #### 4.在setting中配置 ![image-20220824233557045](images/readme/image-20220824233557045.png) #### 5.使用自定义插件 > 1️⃣ 识别插件前缀 Maven 根据插件的 artifactId 来识别插件前缀。例如下面两种情况: - 前置匹配 - 匹配规则:${prefix}-maven-plugin - artifactId:first-maven-plugin - 前缀:first - 中间匹配 - 匹配规则:maven-${prefix}-plugin - artifactId:maven-first-plugin - 前缀:first > 2️⃣ 在命令行直接用 ```sh mvn first:sayHello ``` ![image-20220825000115225](images/readme/image-20220825000115225.png)