个人博客:

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. vue-其他

    vue-resource // 2.1 导入 vue-resource import VueResource from 'vue-resource' // 2.2 安装 vue-resource Vu ...

  2. JS---DOM---事件冒泡和阻止事件冒泡,总结事件

    事件冒泡: 多个元素嵌套, 有层次关系 ,这些元素都注册了相同的事件, 如果里面的元素的事件触发了, 外面的元素的该事件自动的触发了     事件有三个阶段: 1.事件捕获阶段  :从外向内 2.事件 ...

  3. 云原生技术之Docker入门

    1. 为什么需要容器? 下图是一个比较传统的软件架构 做过java的同学可能对上图的架构方式比较了解,我们通常会将一个应用程序生成一个war包,放到一个tomcat容器当中并在一台虚拟机(VM)中启动 ...

  4. React: 高阶组件(HOC)

    一.简介 如我们所知,JavaScript有高阶函数这么一个概念,高阶函数本身是一个函数,它会接收或者返回一个函数,进而对该函数进行操作.其实,在React中同样地有高阶组件这么一个东西,称为HOC, ...

  5. HUE Oozie : error=2, No such file or directory采坑记录

    HUE Oozie : error=2, No such file or directory采坑记录 1.错误详情 一直都是同一种方式在hue上定义workflow,不知为啥 今天定义的就是不行... ...

  6. (2018版)webstorm的安装和破解

    前言 相信使用HBuildX的各位都用过,所以这个webstorm就是用来代替的. 因为使用方式跟idea等软件差不多,如果习惯了idea的操作方式的可以试一试 安装webstorm 这是2018版的 ...

  7. C# List与Dictionary相互转换与高效查找

    TestModel类定义: public class TestModel{    public int Id { get; set; }    public string Name { get; se ...

  8. C#构造方法(构造函数)

    构造方法特点: 一 ,与类同名 public class Product { public int ID { get; set; } public String NAME { get; set; } ...

  9. 易优CMS:switch的基础用法

    [基础用法] 名称:switch 功能:简单条件判断,比if判断标签少些不等于相同功能,视个人习惯而用. 语法: {eyou:switch name='$eyou.field.has_children ...

  10. WebSocket断开原因、心跳机制防止自动断开连接

    1.断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来. ws.onclose = function (e) { console.log('websocket ...