插件开发

返回构建工具


Maven 插件开发

查看 Maven 详细文档

Maven 插件本质是一组 Mojo(Maven plain Old Java Object),每个 Mojo 对应一个 Goal。

pom.xml 关键配置

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

编写 Mojo

@Mojo(name = "greet", defaultPhase = LifecyclePhase.COMPILE)
public class GreetMojo extends AbstractMojo {
 
    @Parameter(property = "greet.name", defaultValue = "World")
    private String name;
 
    @Override
    public void execute() throws MojoExecutionException {
        getLog().info("Hello, " + name + "!");
    }
}

使用插件

<build>
    <plugins>
        <plugin>
            <groupId>com.example</groupId>
            <artifactId>my-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <name>Claude</name>
            </configuration>
        </plugin>
    </plugins>
</build>

Gradle 插件开发

查看 Gradle 详细文档

脚本插件(最简单)

抽取到独立 .gradle.kts 文件,通过 apply from 引用:

// greeting.gradle.kts
tasks.register("greet") {
    doLast { println("Hello, World!") }
}
// build.gradle.kts
apply(from = "greeting.gradle.kts")

buildSrc 插件(多模块内复用)

查看多模块项目

buildSrc/
├── build.gradle.kts
└── src/main/kotlin/com/example/GreetPlugin.kt
class GreetPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.tasks.register("greet") {
            doLast { println("Hello from plugin!") }
        }
    }
}

独立插件(发布到 Gradle Plugin Portal)

plugins {
    `java-gradle-plugin`
    `maven-publish`
}
 
gradlePlugin {
    plugins {
        create("greetPlugin") {
            id = "com.example.greet"
            implementationClass = "com.example.GreetPlugin"
        }
    }
}

相关文档