个人博客:

http://www.milovetingting.cn

Gradle插件

插件的作用

把插件应用到项目中,插件会扩展项目的功能,帮助在项目构建过程中做很多事情。

1、可以添加任务到项目中,帮助完成测试、编译、打包等。

2、可以添加依赖配置到项目中,可以通过它们配置项目在构建过程中需要的依赖,如编译时依赖的第三方库等。

3、可以向项目中现有的对象类型添加新的扩展属性、方法等。

4、可以对项目进行一些约定,如应用Java插件后,约定src/main/java目录是我们的源代码存在位置,在编译的时候也是编译这个目录下的Java源代码文件。

如何应用一个插件

插件的应用都是通过Project.apply()方法完成的。

应用二进制插件

二进制插件就是实现了org.gradle.api.Plugin接口的插件,它们可以有Plugin id。

apply plugin:'java'

上面的语句,其中'java'就是Java插件的plugin id,它是唯一的。其实它对应的类型是org.gradle.api.plugins.JavaPlugin,所以通过该类型,我们也可以应用这个插件:

apply plugin:org.gradle.api.plugins.JavaPlugin

又因为包org.gradle.api.plugins是默认导入的,所以可以去掉包名直接写成:

apply plugin:JavaPlugin

应用脚本插件

build.gradle

apply from:'version.gradle'
task task1{
println "版本是:${versionName},版本号是:${versionCode}"
}

version.gradle

ext{
versionName = '1.0'
versionCode = 1
}

apply方法的其他用法

Project.apply()方法有三种使用方法:

void apply(Map<String,?> options);
void apply(Closure closure);
void apply(Action<? super ObjectConfigurationAction> action);

闭包的方式如下:

apply{
plugin 'java'
}

Action方式:

apply (new Action<ObjectConfigurationAction>){
@Override
void execute(ObjectConfigurationAction objectConfigurationAction){
objectConfigurationAction.plugin('java')
}
}

应用第三方发布的插件

第三方发布的jar的二进制插件,我们在应用的时候,必须要先在buildscript{}里配置其classpath才能使用。

buildscript{
repositories{
jcenter()
}
dependencies{
classpath 'com.android.tools.build:gradle:1.5.0'
}
}

buildscript{}是一个构建项目前,为项目进行前期准备和初始化相关配置依赖的地方,配置好所需的依赖,就可以应用插件了

apply plugin:'com.android.application'

使用plugins DSL应用插件

plugins{
id 'java'
}

更多好用的插件

可以在https://plugins.gradle.org/ 上找到,也可以在github上找。

自定义插件

自定义插件必须实现Plugin接口,这个接口只有一个apply方法,该方法在插件被应用的时候执行。

定义在build脚本文件里:

apply plugin:CustomPlugin

class CustomPlugin implements Plugin<Project>{
void apply(Project project){
project.task('customTask').doLast{
println '这是一个通过自定义插件方式创建的任务。'
}
}
}

这种只能在自己项目里用,如果想开发一个独立的插件给所有想用的人,则需要创建单独工程来开发自定义插件了。

新建一个Android Module

清空Module的build.gradle内容,添加以下内容,配置开发所需的依赖:

apply plugin: 'groovy'

dependencies {
implementation gradleApi()
implementation localGroovy()
}

然后实现依赖类:

删除src/main目录下的所有文件,新建一个groovy文件夹,在这个文件夹新建包,如com.wangyz.plugins,然后在这个文件夹下,新建一个类,如:CustomPlugin.groovy,内容如下:

package com.wangyz.plugins

import org.gradle.api.Plugin
import org.gradle.api.Project class CustomPlugin implements Plugin<Project> { @Override
void apply(Project project) {
project.task('CustomTask').doLast {
println("这是一个通过自定义插件方式创建的任务")
}
}
}

在src/main文件夹下新建resources文件夹,然后在这个文件夹中新建META-INF文件夹,然后在这个文件夹下新建gradle-plugins文件夹,然后新建com.wangyz.plugins.customplugin.properties文件,文件名就是其它应用依赖的名。内容如下:

implementation-class=com.wangyz.plugins.CustomPlugin

写好后,我们配置发布:

在Module的build.gradle文件中,添加以下内容:

apply plugin: 'maven-publish'

publishing {
publications {
mavenJava(MavenPublication) { groupId 'com.wangyz.plugins'
artifactId 'customplugin'
version '1.0.0' from components.java }
}
} publishing {
repositories {
maven {
// change to point to your repo, e.g. http://my.org/repo
url uri('/home/wangyz/repos')
}
}
}

然后在控制台,输入以下指令:

./gradlew publish

发布成功后,配置引用:

在需要引入依赖的工程根目录下的build.gradle添加以下内容:

buildscript {
repositories {
maven {
//local maven repo path
url uri('/home/wangyz/repos')
} }
dependencies {
//这里配置为发布时填写的:groupId:artifactId:version
classpath 'com.wangyz.plugins:customplugin:1.0.0'
}
}

在App的build.gradle下添加以下内容:

//这里的配置为:
apply plugin: 'com.wangyz.plugins.customplugin'

【Gradle】Gradle插件的更多相关文章

  1. [原创]使用Gradle的插件EnIDE build的时候,输出的中文总是乱码。

    使用Gradle的插件EnIDE build的时候,输出的中文总是乱码.解决办法:在EnIDE的设置里面,设置JVM options GRADLE_OPTS 为:-Dfile.encoding=UTF ...

  2. AS 自定义 Gradle plugin 插件 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. gradle ssh 插件

    org.hidetake.ssh Gradle SSH Plugin is a Gradle plugin which provides remote command execution and fi ...

  4. com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题

    在使用Android Studio 这个IDE时,出现com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题 可能的原因就是网速不好或者依 ...

  5. Android gradle 自定义插件

    Gradle 的插件有三种打包方式: 构建脚本:插件逻辑写在 build.gradle 中,适用于逻辑简单的任务,但是该方式实现的插件在该构建脚本之外是不可见的,只能用于当前脚本. buildSrc项 ...

  6. [Gradle] Gradle 构建 android 应用常见问题解决指南

    转载地址:http://www.cnblogs.com/youxilua/p/3348162.html 1: 使用最新的gradle android插件 以前我们写的时候会这么写 dependenci ...

  7. gradle/gradle plugin/Android studio关系

    gradle - 构建工具,存储于Users/stono/.gradle/wrapper/dists Adroid Studio- IDE Gradle plugin - 在AS中使用Gradle的插 ...

  8. Gradle | Gradle项目无法导入依赖包

    Gradle | Gradle项目无法导入依赖包 背景 今天使用idea导入一个Gradle项目,使用 gradle build构建成功,但是项目还是无法正常导入依赖包,显示错误如下: 解决方案 后来 ...

  9. gradle入门(1-7)eclipse和gradle集成插件的安装和使用

    一.安装gradle插件:buildship 1.安装插件 gradle默认的本地缓存库在c盘user目录下的.gradle文件夹下,安装好gradle后,可以添加环境变量GRADLE_USER_HO ...

  10. gradle 自定义插件 下载配置文件

    1.新建Gradle项目: 2.建立src/main/groovy目录,并添加如下代码: ConfigPlugin.groovy package com.wemall.config import or ...

随机推荐

  1. Elasticsearch(GEO)数据写入和空间检索

    Elasticsearch简介 什么是 Elasticsearch? Elasticsearch 是一个开源的分布式 RESTful搜索和分析引擎,能够解决越来越多不同的应用场景. 本文内容 本文主要 ...

  2. sql手工注入1

    手工注入常规思路 1.判断是否存在注入,注入是字符型还是数字型 2.猜解 SQL 查询语句中的字段数 3.确定显示的字段顺序 4.获取当前数据库 5.获取数据库中的表 6.获取表中的字段名 7.查询到 ...

  3. 搭建Android开发环境 以及 ionic 编译安卓app步骤

    1. 下载安装JDK 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...

  4. 软帝学院:一万字的Java基础知识总结大全(实用)

    Java基础总结大全(实用) 一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨 ...

  5. 基于MbedTLS的AES加密实现,含STM32H7和STM32F4的实现例程

    说明: 1.mbedTLS的前身是PolarSSL,开源免费. 主要提供了的SSL/TLS支持(在传输层对网络进行加密),各种加密算法,各种哈希算法,随机数生成以及X.509(密码学里公钥证书的格式标 ...

  6. SQL Server启动/关闭xp_cmdshell

    ==>启用xp_cmdshell USE master RECONFIGURE WITH OVERRIDE RECONFIGURE WITH OVERRIDE RECONFIGURE WITH ...

  7. C lang:Array and Pointer formal parameter

    Test Xx_Formal parameter Formal parameter are local variable. It's private to the function. Ax_Array ...

  8. WebSessionStore: Could not obtain reference to HttpContext

    IBatis.net在多线程中报错“WebSessionStore: Could not obtain reference to HttpContext” 分析: 因为ibatis的ISqlMapSe ...

  9. iOS中UICollectionView添加头视图

    参考链接:https://www.jianshu.com/p/ef57199bf34a 找了一堆的博客,写的都少了很重要的一步. //引入头部视图 -(UICollectionReusableView ...

  10. Android utils 之 日志工具类

    工具类 在开发的过程中,我们时常会对代码执行特定的处理,而这部分处理在代码中可能多次用到,为了代码的统一性.规范性等,通过建工具类的方式统一处理.接下来我会罗列各种工具类. 日志工具类 在utils文 ...