Gradle - Custom Plugins

自定义插件有三种方式

Build script

在 build.gradle 脚本中直接编写插件。插件被包含在构建脚本中,会自动编译,简单方便。但该插件不可再其他构建脚本中使用,不具备可重用性。

class GreetingPlugin implements Plugin {
    void apply(Project project) {
        project.task('hello') {
            doLast {
                println 'Hello from the GreetingPlugin'
            }
        }
    }
}

// Apply the plugin
apply plugin: GreetingPlugin

可以通过 project.extensions 让插件具有可配置性

class GreetingPluginExtension {
    String message
    String greeter
}

class GreetingPlugin implements Plugin {
    void apply(Project project) {
        def extension = project.extensions.create('greeting', GreetingPluginExtension)
        project.task('hello') {
            doLast {
                println "${extension.message} from ${extension.greeter}"
            }
        }
    }
}

apply plugin: GreetingPlugin

// Configure the extension using a DSL block
greeting {
    message = 'Hi'
    greeter = 'Gradle'
}

buildSrc project

Standalone project

可以为插件单独创建一个项目,发布成 JAR 供其他项目使用。独立项目中可以包含多个插件或多个相关的任务类。

创建项目

IDEA -> New Module -> module name(wiki)

build.gradle

plugins {
    id 'java'
    id 'maven-publish'
}

group 'com.hooda'
version '1.0.0'

repositories {
    mavenCentral()
}

dependencies {
    implementation gradleApi()
    
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

publishing {
    publications {
        wiki(MavenPublication) {
            groupId "com.hooda"
            artifactId "wiki"
            version "1.0.0"
            from components.java
        }
    }
}

maven-publish 支持将插件发布到本地 maven 仓库,方便后续的调试


java -> com.hooda.WikiPlugin

public class WikiPlugin implements Plugin {
    @Override
    public void apply(Project project) {
        System.out.println("execute wiki plugin");
    }
}

resources -> META-INF\gradle-plugins\wiki.properties

implementation-class=com.hooda.WikiPlugin

选择 Gradle -> wiki(module) -> Tasks -> publishing -> publishWikiPublicationToMavenLocal 将插件发布到本地 Maven 仓库,后续在其他模块中就可以引入该插件应用。


应用插件

IDEA -> New Module -> module name(wikiapi)

build.gradle

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath "com.hooda:wiki:1.0.0"
    }
}

group 'com.hooda'
version '1.0.0'

repositories {
    mavenCentral()
}

apply plugin: 'java'
apply plugin: 'wiki'

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
插件调试

开启远程调试:
Run -> Edit Configurations -> +(Add New Configuration) -> Remote



应用远程调试:
Gradle -> api(应用模块)-> Tasks -> build -> builld -> 右键 -> Create 'xx [build]

在 VM opitions 中添加,注意:suspend=y

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

将会在 Run Configurations 中新增一个 build,双击 就可以开始调试了


参考资料

Developing Custom Gradle Plugins

你可能感兴趣的:(Gradle - Custom Plugins)