Gradle常见插件开发方式

Gradle常见插件开发方式Gradle 作为项目的构建方式 起着很重要的作用 而我们在开发中却基本很少深入的了解它 这篇文章就记录下在学习插件开发过程的笔记 插件开发的基础是 task 对于 task 的学习 可以看任玉刚的这篇文章 基本的使用介绍得很清楚 Gradle 插件分为脚本插件 和对象插件 下面来分别看下两者的使用

大家好,我是讯享网,很高兴认识大家。

Gradle作为项目的构建方式,起着很重要的作用,而我们在开发中却基本很少深入的了解它,这篇文章就记录下在学习插件开发过程的笔记。插件开发的基础是task,对于task的学习,可以看任玉刚的这篇文章,基本的使用介绍得很清楚。

Gradle插件分为脚本插件对象插件,下面来分别看下两者的使用

脚本插件

脚本插件就是在普通的gradle中写一系列task,然后在别的gradle构建脚本中通过 apply from: 'xx.gradle' 引用这个脚本插件

在这里插入图片描述
讯享网
首先在根目录中创建config.gradle文件,在里面定义好一个task

project.task("showConfig") { 
    doLast { 
    println("$project.name:showConfig") } } 

讯享网

然后我们在项目的gradle中引入

讯享网apply from: 'config.gradle' 

接着就可以通过gradlew执行这个task了

gradlew showconfig 

运行结果

讯享网> Task :showConfig GradleDemo:showConfig 

对象插件

对象插件是指实现了org.gradle.api.Plugin接口的类。并且需要实现void apply(T target)这个方法,该方法中的泛型指的是此Plugin可以应用到的对象,而我们通常是将其应用到Project对象上。

编写对象插件常见创建方式
1 .直接在gradle脚本文件中
2 .在buildSrc目录下
3 .在独立的项目下

gradle中直接创建

gradle里面创建比较简单,直接实现类接口

//app.gradle class CustomPluginInBuildGradle implements Plugin<Project> { 
    @Override void apply(Project target) { 
    target.task('showCustomPluginInBuildGradle'){ 
    doLast { 
    println("task in CustomPluginInBuildGradle") } } } } 

然后通过插件类名引用它

讯享网//app.gradle apply plugin: CustomPluginInBuildGradle 

接着就可以直接执行这个task了

运行结果

> Task :app:showCustomPluginInBuildGradle task in CustomPluginInBuildGradle 

buildSrc目录中创建

buildSrc目录是Gradle在项目中配置自定义插件的默认目录,里面定义的task可以直接使用,首先我们需要创建一个Java Library Module,名字叫buildSrc,因为使用的groovy,所以目录下面的java需要修改为groovy,需要通过id符号引入的,也需要创建resources->META-INF->gradle-plugins

修改之后的目录结构

在这里插入图片描述
CustomPluginInBuildSrc是定义好的对象插件,resources中定义的内容是为了通过id识别的

讯享网package com.gary.plugin import org.gradle.api.Project import org.gradle.api.Plugin class CustomPluginInBuildSrc implements Plugin<Project> { 
    @Override void apply(Project project) { 
    project.task('showCustomPluginInBuildSrc') { 
    doLast { 
    println('task in CustomPluginInBuildSrc') } } } } 

tip: 有时候可能不会自动导包,需要手动导入,package也别忘了,否则就会报一些奇怪的错误。

接着看下resources里面的myplugin.properties

implementation-class=com.gary.plugin.CustomPluginInBuildSrc 

这其中myplugin是别的gradle构建脚本识别的id,implementation-class需要设置的是全路径名,当然resources目录里面的内容可以不用创建,我们在别的构建脚本中导入的时候,就需要导入全路径名

讯享网apply plugin: 'myplugin' 

导入之后我们就可以使用buildSrc里面的task了

运行结果

> Task :app:showCustomPluginInBuildSrc task in CustomPluginInBuildSrc 

在buildSrc里面定义的task就可以在不同module中使用,但是不适合在不同project中使用了

在独立的项目中创建

在独立项目中创建和buildSrc中创建是一样的,只不过要使用的话,这个项目需要打包上传,然后在别的项目中引入,这里测试的话,就上传到本地目录中了,上传首先要引入Maven,配置代码如下

讯享网apply plugin: 'groovy' apply plugin: 'maven' dependencies { 
    compile gradleApi() compile localGroovy() } group = 'com.gary.plugin' version = '1.0.0' uploadArchives { 
    repositories { 
    mavenDeployer { 
    repository(url: uri('../repo')) } } } 

接着点击这里

在这里插入图片描述
接着就会打包项目,上传到项目根目录repo中,上传结果

在这里插入图片描述
在项目中就可以通过group:artifact:version方式引入了

buildscript { 
    //https://docs.gradle.org/current/userguide/custom_plugins.html repositories { 
    maven { 
    url uri('repo') } google() jcenter() } dependencies { 
    classpath 'com.android.tools.build:gradle:3.2.1' classpath 'com.gary.plugin:alonemyplugin:1.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } 

然后在module的gradle中引入

讯享网apply plugin: 'alonemyplugin' 

最后就可以使用在项目中定义的task了。

运行结果

> Task :app:showStandAlonePlugin task in StandAlonePlugin 

总结

1 . 插件分为脚本插件和对象插件。
2 . 脚本插件通过apply from: 'foo.gradle’引用。
3 . 对象插件可以在当前构建脚本下直接编写,也可以在buildSrc目录下编写,还可以在完全独立的项目中编写,通过插件类名或是id引用。apply plugin: ClassName或者apply plugin:‘pluginid’

参考

小讯
上一篇 2025-03-16 09:51
下一篇 2025-03-11 15:05

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/113837.html