Gradle - Custom Plugins

自定义插件有三种方式

Build script

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

class GreetingPlugin implements Plugin<Project> {
    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<Project> {
    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<Project> {
    @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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在 Android Studio 构建的项目中,基于 Gradle 进行项目的构建,同时使用 Android DS...
    Ant_way阅读 7,474评论 0 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • 本篇参考Gradle官方文档,主要是从Android开发者的视角,介绍在使用Gradle进行构建的过程中涉及到的一...
    chandarlee阅读 5,433评论 0 5
  • 1 什么是插桩? 听到关于“插桩”的词语,第一眼觉得会很高深,那到底什么是插桩呢?用通俗的话来讲,插桩就是将一段代...
    枫叶1234阅读 2,927评论 1 7
  • 本文原作者为:kale2010 .blog地址:http://www.cnblogs.com/tianzhijie...
    NoValue阅读 3,628评论 0 11