初识Gradle插件开发

797

一、Groovy初识

groovy-lang.org/gdk.html

1、特点:

  • Groovy是一门jvm语言
  • Java语言的特性Groovy都支持,我们可以混写Java和Groovy

2、与Java对比

2.1 变量定义

Groovy中的变量可以通过两种方式定义:使用数据类型的本地语法,或者使用def关键字

2.2 集合遍历
def list = [1,2,3,4]
list.each{
  println it
}
2.3 文件读写
File file = new File("E:/Example.txt") 
println file.text 

Groovy开发更为简洁,也可使用java语法进行插件开发

二、Gradle插件开发流程

1、新建插件工程

1.1 调整代码结构

新建一个Java Library的module,删除java目录,创建groovy和resources、META-INF、gradle-plugins目录

1.2 gradle-plugins中文件
  • 创建一个.properties文件,文件名称相当于插件的别名,用于引用某个插件
  • 文件内容:implementation-class对应某个插件的完整名称
implementation-class=com.test.plugin.TestPlugin
1.3 module下的build.gradle文件
apply plugin: 'groovy'
apply plugin: 'maven'
repositories {
  jcenter()
  google()
}

dependencies {
  //gradle sdk
  compile gradleApi()
  //groovy sdk
  compile localGroovy()
}
1.4 创建插件文件
class TestPlugin implements Plugin<Project> {

  @Override
  void apply(Project target) {
    println("----plugin running")
  }
}

实现Plugin,在apply方法中添加新的任务

2、插件本地上传

该module下的build.gradle

//插件版本
version = "1.0.0"
//插件所属group
group='com.test.plugin'
//插件名称
archivesBaseName = 'test'

uploadArchives{ //当前项目可以发布到本地文件夹中
  repositories {
    mavenDeployer {
      repository(url: uri('/Users/hh/Desktop/repos')) //定义本地maven仓库的地址
    }
  }
}

执行uploadArchives进行上传

3、插件远程上传

插件远程上传

三、Gradle插件断点调试

1、插件工程添加远程调试任务

点击选择Edit Configurations

添加Remote,其他配置使用默认值
在对应位置添加断点

2、应用工程配置调试环境变量

在应用工程根目录输入下面的命令开启gradle的远程调试

export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

在应用工程根目录输入下面的命令启动远程调试器

./gradlew --no-daemon checkGradleDependencies  -Dorg.gradle.debug=true

3、插件工程添加调试器

点击Debug按钮,添加调试器

再次点击Debug按钮,在应用工程的命令行查看构建开始执行,当运行到插件工程断点时,就会自动暂停

4、结束调试

在应用工程根目录输入下面命令关闭gradle远程调试

export GRADLE_OPTS=""

四、Gradle插件应用

项目根目录build.gradle,添加依赖库路径和依赖

buildscript {
    repositories {
        maven {
            url uri('/Users/hh/Desktop/repos')
        }
    }
    dependencies {
        classpath 'com.test.plugin:test:1.0.0'
    }
}

app module下的build.gradle,引用插件

apply plugin: 'com.test.plugin'

运行后打印出日志