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