本文链接:[使用IDEA开发Gradle插件 : 开发基本过程] http://blog.devwiki.net/index.php/2017/08/28/develop-gradle-plugin-use-idea-1.html

转载请注明出处,谢谢.

0x01 创建工程

1.打开 IDEA 新建工程,选择 Gradle工程, 并选择 Groovy,去除Java选项.

0d614ba45f2b6d5e0d9c3cefb6a13691.png

2.下一步填写 GroupIdArtfactId,然后下一步

71cf1610298992dafe41f0dab50ddf59.png (958×627)

3.勾选Create separate module per source set, 接着下一步

f3d71683ddeae00d53822912e5b8a098.png (958×627)

4.填写工程名称,并完成创建

43f09132d88a1155afe46e2a046451be.png (958×627)

5.创建完成后目录如下:

f69547b5b4e9dd8267308da03fad37f2.png (496×435)

0x02 设置工程

1. 设置根目录 build.gradle

打开根目录下的 build.gradle 文件,修改如下:

group 'deveiki.net'
version '1.0-SNAPSHOT'

apply plugin: 'groovy'

repositories {
    mavenCentral()
}

dependencies {
    compile localGroovy()
    compile gradleApi()
    //compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

2. 实现 Plugin

src/main/groovy/<package_name>/下创建Plugin的子类: DevWikiPlugin.groovy,如下:

class DevWikiPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.extensions.create("devwiki", DevWikiPluginExtension)
    }
}

DevWikiPluginExtension.groovy内容如下:

/**
 * 接收参数的类
 */
class DevWikiPluginExtension {
    String message = 'Message'
}

3. 添加属性文件

/src/main/resources/META-INF/gradle-plugins/目录下新建属性文件: DevWikiPlugin.properties, 内容如下:

implementation-class=net.devwiki.plugin.DevWikiPlugin

4. 添加Task

/src/main/groovy/<package_name>/task/目录下添加 DevWikiTask.groovy, 内容如下:

class DevWikiTask extends DefaultTask{

    DevWikiTask() {
        group = 'devwiki'
        description = 'devwiki first task'
    }

    @TaskAction
    def devwiki() {
        println "devwiki plugin: Hello World!"
    }
}

然后修改DevWikiPlugin.groovy内容如下:

class DevWikiPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.extensions.create("devwiki", DevWikiPluginExtension)
        project.tasks.create("devwiki", DevWikiTask)
    }
}

5. 构建插件

在控制台执行: gradle build, 或者在 Gradle 面板执行 build 任务

412afc1903f9582cb9cd25e377c312fa.png (465×437)

执行结果如下:

$ gradle build
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for deta           ils
Generating JAR file 'gradle-api-4.0.jar'
:compileJava NO-SOURCE
:compileGroovy
:processResources
:classes
:jar
:assemble
:compileTestJava NO-SOURCE
:compileTestGroovy NO-SOURCE
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
:test NO-SOURCE
:check UP-TO-DATE
:build

BUILD SUCCESSFUL in 27s
3 actionable tasks: 3 executed

在根目录下会生成 /build文件夹和 jar 文件:

125b118e845423be1e8cf59f54e5f699.png (429×430)

0x03 改造工程

为了方便调试,将项目改为多 module 的 Project.

  1. 在项目根目录创建文件夹: plugin

  2. 复制根目录下的 /src目录下内容至 plugin目录

  3. 复制build.gradle文件至 plugin目录

  4. 删除.gradle, .idea, build, src文件夹

  5. 修改根目录下的build.gradle如下:

buildscript {
    repositories {
        mavenCentral()
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}
  1. 修改setting.gradle内容内容如下:
include 'plugin'
  1. 关闭项目然后重新打开,让 IDEA 重新生成 .idea 和 .gradle 文件夹下文件.
    e7cc182caa0cc278864d8f9afa0eb7a8.png (427×291)

  2. 执行gradle build 或者在Gradle面板执行build任务,构建项目.
    539271dda1a18dcf01ffa5a31ae79aa0.png (489×463)

至此,项目已经改造成多 module 项目.

0x04 引用插件

由于没有发布到 JCenter 和 Maven ,所以采用文件引用方式.复制 Jar 文件到目标项目的根目录.

1. 新建sample module

对着根目录devwiki_plugin右键新建module, 选择 Gradle类型,默认选择然后next

e447720ddbeb2fcf881f79a0581cb609.png (971×763)

确保下图的红框处为根目录,如果不是点击最后面的文件夹图标选择.然后下一步.

c6bea5d25ae2727fe376eb95a560d781.png (971×445)

使用默认值,直接点击完成

402c0d589883dba9f66b6ab5fbb0ccfd.png (971×445)

最后项目目录结构如下:

74c56e39c0dc431af464b88e1bb2f924.png (481×431)

2. 添加引用插件

修改根目录的build.gradle内容如下:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath files("${rootDir}/plugin/build/libs/plugin-1.0-SNAPSHPT.jar") // 依赖本地文件,需要将jar文件放到项目根目录
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

然后修改 sample 目录的 build.gradle如下:

group 'devwiki.net.sample'
version '1.0'

apply plugin: 'java'
apply plugin: 'DevWikiPlugin'

sourceCompatibility = 1.8

dependencies {
}

然后使用 Gradle 面板刷新一下工程,在Gradle面板 sample module里面可以找到 devwiki task.

24f8a2933d835f8a1d56ca0f8e9d85ee.png (307×416)

在控制台执行: gradle devwiki, 结果如下:

C:\Dev\Workspace\IDEA\devwiki_plugin>gradle devwiki
Parallel execution with configuration on demand is an incubating feature.

> Task :sample:devwiki
devwiki plugin: Hello World!


BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

0x05 后记

至此,简单的 Gradle 插件开发基本完成,项目代码在此: Dev-Wiki/devwiki_plugin

参考文章:

  1. Gradle插件开发与执行原理浅析 | Paincker | Hacker Meets Painter
  2. 如何使用Android Studio开发Gradle插件 - 区长的专栏 - CSDN博客