Gradle插件编写(三)

一、前言

上一篇记录了使用buildSrc的方式创建gradle插件,但是这种方式只能当前项目的不同模块使用。所以如果将代码发布到云端就可以使大家都可以使用了,这种方式大家通常使用maven或者ivy,不过目前使用maven的居多。maven不仅可以发布到云端也可以发布到本地供不同的项目使用。由于云端需要创建各种账号,比较繁琐,这里仅记录如何发布到本地。以后想修改成云端发布时候,只需要填写上地址和账号即可。

二、环境版本

该代码是在Mac上进行开发的,不过这个不重要,这里记录下主要的开发环境版本

Android Studio: Android Studio Arctic Fox | 2020.3.1 Patch4
gradle: 7.0.2
android_gradle: 7.0.4

三、代码

该插件的创建方式是通过在一个Android 项目中创建的(其实更应该是单独创建一个插件项目而不是这种方式,不过该方式可以做到很方便的测试)。其整体结构目录如下:
在这里插入图片描述

这里代码主要放在java目录下面。采用java语言编写,而不是groovy。具体原因稍后解释。

java包下面是定义的包名,所以plugin可以写成自己想要定义的包名。

test-gradle.properties该文件名可以随便定义,名字可以用来在后面引用插件。

将该模块添加进项目根目录的settings.gradle中。其中代码定义如下:

settings.gradle

dependencyResolutionManagement {
//    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenLocal()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
        maven { url 'https://jitpack.io' }
    }
}
rootProject.name = "My Application"
include ':app'
include ':lib'
include ':test-plugin'

其中需要注意要注释掉以下代码:

repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)

然后打开test-plugin/build.gradle文件。其内容如下:

build.gradle

plugins {
    id 'maven-publish'
    id 'java-library'
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "com.android.tools.build:gradle:7.0.4"
    implementation gradleApi()
    implementation localGroovy()
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10"
}

publishing {
    publications {
        maven(MavenPublication) {
            groupId = 'com.test.plugin'
            artifactId = 'ym'
            version = '1.0.0'
            from components.java
        }
    }

    repositories {
        maven {
            // change to point to your repo, e.g. http://my.org/repo
            url = layout.buildDirectory.dir('repo')
        }
    }
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}
sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
//        groovy {
//            srcDir 'src/main/groovy'
//        }
 //        resources {
//            srcDir 'src/main/resources'
//        }
    }
}

这里需要注意sourceSets里面注释的函数,这两个函数表示是不存在的,所以如果像之前那样定义groovy是无法找到里面的文件的。所以是不能定义groovy文件。

打开test-gradle.properties,定义以下内容,该内容表示了插件入口:

其内容为包名+类名

implementation-class=plugin.TestPlugin

定义完后可以build下程序以便在编写代码时候可以使用代码联想功能。接下来定义插件内容

TestPlugin.java

package plugin;

import org.gradle.api.Plugin;
import org.gradle.api.Project;

class TestPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        System.out.println("打印的第四种方式-test");
    }
}

编写完毕后重新build项目,然后进行发布到本地。

打开右侧Gradle窗口执行pubilsh任务。如下图所示:

在这里插入图片描述

如果选择...ToMAvenLocal来发布的话则会发布到本地,这样mavenLocal()函数就可以使用了,否则只是使用pubilsh的话,只会执行自己编写的发布方式,比如该文的发布到repo文件夹中,如果要使用这里的话需要在maven仓库中指定插件查找位置

这样插件就发布完成了。

四、插件使用

插件发布完成就可以使用了,这里还在这个项目中进行使用。

打开项目根目录下build.gradle文件进行引入插件。代码如下所示:

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        mavenCentral()
        mavenLocal()//该仓库主要是引入本地插件的仓库。一般本地发布的插件就会通过这个方式进行引入
        maven { url 'https://jitpack.io' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.4'
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10'
        classpath 'com.test.plugin:ym:1.0.0' 
    //该命名规则是通过插件里面build.gradle里面的publications中定义的属性进行编写

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

然后在app/build.gradle中进行使用插件。如下:

build.gradle

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'test-gradle' //该名字就是之前定义的test-gradle.properties的文件名
}

android {
    ...
    ...
}

然后重新build文件,会看到编译过程中打印出插件中定义的日志

如果上文还有不太了解的或者遇到来其它问题,可以仔细月底参考链接的前三篇文章:

由于该内容在开发过程中较为复杂,所以将代码上传至github上以供参考:
https://github.com/mayangming/gradlePluginTest/tree/master

五、参考链接

  1. Android Gradle Plugins系列-01-自定义Gradle插件入门指南
  2. Android Gradle Plugins系列-02-Maven Publish 插件踩坑指南
  3. Android Gradle Plugins系列-01-自定义Gradle插件入门指南
  4. 开发自定义 Gradle 插件
  5. gradle 自定义插件
  6. maven-publish插件的使用
  7. Android Gradle插件开发
  8. 来开源吧!发布开源组件到 MavenCentral 仓库超详细攻略(可以使用vanniktech插件简化发布流程)
  9. 第 4 部分:应用 Gradle 插件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gradle 是一种现代化的构建工具,它具有强大的配置能力和灵活性。下面是一份关于 gradle 配置编写的手册: 一、项目结构 1. 在项目根目录下创建 build.gradle 文件,用于设置整个项目的全局配置。 2. 在每个子模块的目录下,可以创建单独的 build.gradle 文件,用于设置该模块的独立配置。 二、基础配置 1. 定义项目基本信息:可以使用 project 关键词来定义项目名称、版本号等信息。 2. 配置项目的依赖:使用 dependencies 关键词来添加项目的依赖项。 、构建脚本语法 1. 定义变量:使用 def 关键词定义变量,并且可以在后续的配置中使用。 2. 执行命令:使用 exec 关键词可以执行一些命令行操作。 3. 条件判断:使用 if-else 语句来进行条件判断和控制流程。 4. 循环操作:使用 for 循环关键词来进行循环操作。 四、任务配置 1. 定义任务:使用 task 关键词定义任务,可以自定义任务的名称和行为。 2. 任务依赖:使用 dependsOn 关键词为任务设置依赖关系。 3. 任务执行顺序:使用 finalizedBy 关键词为任务定义最终执行的操作。 五、插件配置 1. 引入插件:使用 apply plugin 关键词来引入需要使用的插件。 2. 配置插件:使用插件提供的配置项来进行具体的插件设置。 六、构建过程配置 1. 构建生命周期:使用 beforeCompile、afterCompile 等关键词来设置在构建过程中的执行时机。 2. 构建操作:使用 doFirst、doLast 关键词来设置在构建过程中进行的具体操作。 七、常用命令 1. gradle build:编译构建项目。 2. gradle clean:清除构建过程中的临时文件。 3. gradle test:运行项目的测试用例。 4. gradle run:运行应用程序。 以上是关于 gradle 配置编写的基本手册,希望对您有所帮助。如果需要了解更多细节,请参考官方文档或其他详细的教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值