Gradle自己定义插件
Gradle自己定义插件
在Gradle中创建自己定义插件,Gradle提供了三种方式:
- 在build.gradle脚本中直接使用
- 在buildSrc中使用
- 在独立Module中使用
开发Gradle插件能够在IDEA中进行开发。也能够在Android Studio中进行开发,它们唯一的不同,就是IDEA提供了Gradle开发的插件,比較方便创建文件和文件夹,而Android Studio中,开发人员须要手动创建(但实际上。这些文件夹并不多,也不复杂,全然能够手动创建)。
在项目中使用
在Android Studio中创建一个标准的Android项目,整个文件夹结构例如以下所看到的:
├── app
│ ├── build.gradle
│ ├── libs
│ └── src
│ ├── androidTest
│ │ └── java
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── res
│ └── test
├── build.gradle
├── buildSrc
│ ├── build.gradle ---1
│ └── src
│ └── main
│ ├── groovy ---2
│ └── resources ---3
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
当中。除了buildSrc文件夹以外,都是标准的Android文件夹,而buildSrc就是Gradle提供的在项目中配置自己定义插件的默认文件夹。开发Gradle要创建的文件夹,也就是RootProject/src/main/groovy和RootProject/src/main/resources两个文件夹。
在配置完毕后,假设配置正确,相应的文件夹将被IDE所识别,成为相应类别的文件夹。
创建buildSrc/build.gradle—1
首先,先来配置buildSrc文件夹下的build.gradle文件。这个配置比較固定。脚本例如以下所看到的:
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
创建Groovy脚本—2
接下来,在groovy文件夹下,创建一个Groovy类(与Java相似,能够带包名,但Groovy类以.grovvy结尾)。如图所看到的:
在脚本中通过实现gradle的Plugin接口,实现apply方法就可以,脚本例如以下所看到的:
package com.xys
import org.gradle.api.Plugin
import org.gradle.api.Project
public class MainPluginForBuildSrc implements Plugin<Project> {
@Override
void apply(Project project) {
project.task('testPlugin') << {
println "Hello gradle plugin in src"
}
}
}
在如上所看到的的脚本的apply方法中。笔者简单的实现了一个task,命名为testPlugin。运行该Task。会输出一行日志。
创建Groovy脚本的Extension
所谓Groovy脚本的Extension。实际上就是相似于Gradle的配置信息,在主项目使用自己定义的Gradle插件时。能够在主项目的build.gradle脚本中通过Extension来传递一些配置、參数。
创建一个Extension,仅仅须要创建一个Groovy类就可以。如图所看到的:
如上所看到的。笔者命名了一个叫MyExtension的groovy类,其脚本例如以下所看到的:
package com.xys;
class MyExtension {
String message
}
MyExtension代码很easy,就是定义了要配置的參数变量。后面笔者将详细演示怎样使用。
在Groovy脚本中使用Extension
在创建了Extension之后,须要改动下之前创建的Groovy类来载入Extension。改动后的脚本例如以下所看到的:
package com.xys
import org.gradle.api.Plugin
import org.gradle.api.Project
public class MainPluginForBuildSrc implements Plugin<Project> {
@Override
void apply(Project project) {
project.extensions.create('pluginsrc', MyExtension)
project.task('testPlugin') << {
println project.pluginsrc.message
}
}
}
通过project.extensions.create方法,来将一个Extension配置给Gradle就可以。
创建resources—3
resources文件夹是标识整个插件的文件夹。其文件夹下的结构例如以下所看到的:
└── resources
└── META-INF
└── gradle-plugins
该文件夹结构与buildSrc一样,是Gradle插件的默认文件夹,不能有不论什么改动。创建好这些文件夹后,在gradle-plugins文件夹下创建——插件名.properties文件,如图所看到的:
如上所看到的。这里笔者命名为pluginsrc.properties。在该文件里。代码例如以下所看到的:
implementation-class=com.xys.MainPluginForBuildSrc
通过上面的代码指定最開始创建的Groovy类就可以。
在主项目中使用插件
在主项目的build.gradle文件里,通过apply指令来载入自己定义的插件。脚本例如以下所看到的:
apply plugin: 'pluginsrc'
当中plugin的名字。就是前面创建pluginsrc.properties中的名字——pluginsrc,通过这样的方式。就载入了自己定义的插件。
配置Extension
在主项目的build.gradle文件里,通过例如以下所看到的的代码来载入Extension:
pluginsrc{
message = 'hello gradle plugin'
}
相同,领域名为插件名,配置的參数就是在Extension中定义的參数名。
配置完毕后,就能够在主项目中使用自己定义的插件了,在终端运行gradle testPlugin指令,结果例如以下所看到的:
:app:testPlugin
hello gradle plugin
在本地Repo中使用
在buildSrc中创建自己定义Gradle插件仅仅能在当前项目中使用,因此,对于具有普遍性的插件来说。一般是建立一个独立的Module来创建自己定义Gradle插件。
创建Android Library Module
首先。在主项目的工程中,创建一个普通的Android Library Module,并删除其默认创建的文件夹。改动为Gradle插件所须要的文件夹,即在buildSrc文件夹中的全部文件夹,如图所看到的:
如上图所看到的。创建的文件与在buildSrc文件夹中创建的文件都是一模一样的,仅仅是这里在一个自己定义的Module中创建插件而不是在默认的buildSrc文件夹中创建。
部署到本地Repo
由于是通过自己定义Module来创建插件的。因此。不能让Gradle来自己主动完毕插件的载入。须要手动进行部署,所以,须要在插件的build.gradle脚本中添加Maven的配置,脚本例如以下所看到的:
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
group='com.xys.plugin'
version='2.0.0'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('../repo'))
}
}
}
相比buildSrc中的build.gradle脚本,这里添加了Maven的支持和uploadArchives这样一个Task,这个Task的作用就是将该Module部署到本地的repo文件夹下。
在终端中运行gradle uploadArchives指令,将插件部署到repo文件夹下,如图所看到的:
当插件部署到本地后,就能够在主项目中引用插件了。
当插件正式公布后,能够把插件像其他module一样公布到中央库,这样就能够像使用中央库的库项目一样来使用插件了。
引用插件
在buildSrc中。系统自己主动帮开发人员自己定义的插件提供了引用支持。但自己定义Module的插件中。开发人员就须要自己来加入自己定义插件的引用支持。
在主项目的build.gradle文件里。加入例如以下所看到的的脚本:
apply plugin: 'com.xys.plugin'
buildscript {
repositories {
maven {
url uri('../repo')
}
}
dependencies {
classpath 'com.xys.plugin:plugin:2.0.0'
}
}
当中。classpath指定的路径,就是相似compile引用的方式。即——插件名:group:version
配置完毕后,就能够在主项目中使用自己定义的插件了,在终端运行gradle testPlugin指令,结果例如以下所看到的:
:app:testPlugin
Hello gradle plugin
假设不使用本地Maven Repo来部署,也能够拿到生成的插件jar文件。拷贝到libs文件夹下,通过例如以下所看到的的代码来引用:
classpath fileTree(dir: 'libs', include: '\*.jar') // 使用jar
參考:https://docs.gradle.org/current/userguide/custom_plugins.html
Gradle自己定义插件的更多相关文章
- jQuery上定义插件并重设插件构造函数
插件alert的全部代码,每个插件都定义在如下类似的作用域中: +function ($) { 'use strict'; // ALERT CLASS DEFINITION // ========= ...
- 使用gradle的application插件进行Spring-boot项目打包
1:在build.gradle中增加以下配置 fat jar并不总是一个合适的选择,比如需要依赖跟jar分离,使用gradle的application插件就可以做到. 在GradleTest项目中,b ...
- phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
统一登陆还是非常有必要的,安全,放心.代码 /*cordov 微信自己定义插件*/ (function (cordova) { var define = cordova.define; define( ...
- js自己定义插件-选项卡
该功能比較简单.巩固一下jquery插件写法,注意引入的jquery.js . 自己定义插件路径代码例如以下: 页面: <!doctype html> <html> < ...
- openstack页面自己定义插件使用具体解释(django、ajax、post)(zTree为例)
感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正! 如有转载.请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...
- Android Cordova 插件开发之编写自己定义插件
前言 本文适合Android+web的复合型人才,由于cordova本身就是混合开发,所以在Android开发的基础上,还要懂web相关技术(HTML+CSS+JS).可是也有例外,比方我.仅仅需负责 ...
- VS Code Java 更新 – 全新Gradle for Java插件,更方便的代码操作, 1.0 语言支持发布
大家好,欢迎来到 9 月版的 Visual Studio Code Java 更新.在这篇文章中,我们将分享我们最新的Gradle插件,更加方便的代码操作(Getter/Setter等等),以及最近的 ...
- cordova开发自己定义插件
以下是自己定义cordova插件的基本入门.做插件的小白可以參考一下哈,兴许会更新插件的进阶博客,希望大家可以共同学习共同进步 1.环境搭建 cordova插件开发前须要安装一些软件和配置环境 1.1 ...
- 为Gradle添加tomcat插件,调试WEB应用
Gradle提供了不输于maven的依赖管理 提供了强大的test功能,输出优美的测试报告 并且提供war插件,使用内置的jetty调试WEB应用 因为博主偏偏钟情于tomcat,所以希望使用tomc ...
随机推荐
- [Javascript] Identify the most important words in a document using tf-idf in Natural
Tf-idf, or term frequency-inverse document frequency, is a statistic that indicates how important a ...
- js12---闭包,原型,继承
<html> <body> <script type="text/javascript"> //闭包实现了函数层面多个子函数共享父类函数的属性. ...
- 为您的Office文档加把锁-ADRMS的安装
为您的Office文档加把锁-ADRMS的安装 如今不少企业越来越重视自己KM(知识管理系统)的建立对于KM的建立实施虽然可以有效地解决企业在知识管理上的问题对于一些具有商业利益关系的机密文件(例如: ...
- Mysql数据库的瓶颈处理一点建议
Mysql数据库的瓶颈处理一点建议 我们在使用Mysql数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候.磁盘I/O瓶颈的出 ...
- MSSQL相关用法
一.分页查询 方式一(row_number): SELECT TOP pageSize * FROM (SELECT row_number() OVER (ORDER BY orderColumn) ...
- 仙人掌的同构(hash)
关于仙人掌的同构,主要是我太蒟蒻了QAQ,问了好几位大佬才弄好. 手撕仙人掌,你得先有手套 ,你得先了解以下基本知识 a.点双连通分量,没什么好说得,仙人掌上有环,判环用点双 b.树的hash点这里 ...
- A题之拼音转数字
输入是一个仅仅包括拼音的字符串,请输出相应的数字序列.转换关系例如以下: 描写叙述: 拼音 yi er san si wu liu qi ba jiu 阿拉伯数字 1 2 3 4 5 6 ...
- maven的pom.xml配置文件讲解
<project xmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.o ...
- 洛谷——U10206 Cx的治疗
https://www.luogu.org/problem/show?pid=U10206 题目背景 「Cx的故事」众所周知,Cx是一个宇宙大犇.由于Cx在空中花园失足摔下,导致他那蕴含着无穷智慧的大 ...
- 使用 Python 第三方库 daft 绘制 PGM 中的贝叶斯网络
daft 的官方文档请见 DAFT:BEAUTIFULLY RENDERED PROBABILISTIC GRAPHICAL MODELS. from matplotlib import rc rc( ...