Maven 开发自定义插件

1. Maven 插件

官方插件命名格式:maven-<xxx>-plugin
非官方插件命名格式:<xxx>-maven-plugin

2. 插件开发

2.1 创建项目

插件本身也是Maven项目

项目骨架选择 org.apache.maven.archetypes:maven-archetype-mojo

pom.xml 分析
打包方式设置为 maven-plugin

<groupId>org.example</groupId>
<artifactId>demo-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>

<packaging>maven-plugin</packaging>

Maven 插件依赖的核心包 maven-plugin-api

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>3.5.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

MyMojo.java 文件

/**
 * Goal which touches a timestamp file.
 *
 * @goal 指定插件的命名,同注解 @Mojo
 * @phase 绑定插件执行的生成周期
 */
@Mojo(name = "myMojo")
public class MyMojo extends AbstractMojo {

    @Parameter(name = "name", defaultValue = "xing")
    private String name;

    /**
     * 插件入口类
     */
    public void execute() throws MojoExecutionException {
        getLog().info("Hello " + name);
    }
}

需要继承抽象类 AbstractMojo.java

2.2 插件打包

Install 上传到本地 maven 仓库

3. 使用自定义插件

3.1 在项目中添加插件

<build>
    <plugins>
        <plugin>
            <groupId>org.example</groupId>
            <artifactId>demo-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
        </plugin>
    </plugins>
</build>

双击 dmeo:myMojo 控制台会输出:

可配置 Parameter 参数

<plugin>
    <groupId>org.example</groupId>
    <artifactId>demo-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <configuration>
        <name>World</name>
    </configuration>
</plugin>

此时控制台打印 [INFO] Hello World

3.2 附到生命周期

在构建生命周期的 package 阶段,目标 myMojo自动执行

<plugin>
    <groupId>org.example</groupId>
    <artifactId>demo-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>myMojo</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <name>World</name>
    </configuration>
</plugin>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容