如何應(yīng)用一個(gè)插件
應(yīng)用二進(jìn)制插件
-
什么是二進(jìn)制插件
- 二進(jìn)制插件就是實(shí)現(xiàn)了org.gradle.api.Plugin接口的插件诲侮,他們可以有plugin id
- 二進(jìn)制插件一般都是被打包在一個(gè)jar里獨(dú)立發(fā)布的樟澜,比如我們自定義的插件
-
實(shí)例
-
代碼:
apply from:'version.gradle' task ex52PrintlnTask << { println "App版本是:${versionName},版本號(hào)是:${versionCode}" }
-
version.gradle
ext { versionName = '1.0.0' versionCode = 1 }
運(yùn)行結(jié)果:
-
> Task :ex52PrintlnTask
App版本是:1.0.0,版本號(hào)是:1
- 分析:
- 其實(shí)這不算一個(gè)插件铆惑,它只是一個(gè)腳本畜伐;應(yīng)用腳本插件灼伤,其實(shí)就是把這個(gè)腳本加載進(jìn)來(lái)搏色,和二進(jìn)制插件不同的是它使用的是from關(guān)鍵字仰猖,后面緊跟是一個(gè)腳本文件芬探,可以是本地的也可以是網(wǎng)絡(luò)的神得,如果是網(wǎng)絡(luò)的話要使用HTTPURL
- 雖然它不是一個(gè)真正的插件,但不能忽視它的作用偷仿,它是腳本文件模塊化的基礎(chǔ)哩簿,我們可以把龐大的腳本文件,進(jìn)行分塊酝静、分段整理节榜,拆分成一個(gè)共用、職責(zé)分明的文件
-
apply方法的其他用法
-
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) } })
-
-
應(yīng)用第三方發(fā)布的插件
buildscript { repositories { jcenter() } dependencies { // gradle插件版本 classpath 'com.android.tools.build:gradle:3.0.0' } }
- 分析:
-
buildscript{}塊是一個(gè)在構(gòu)建項(xiàng)目之前别智,為項(xiàng)目進(jìn)行前期準(zhǔn)備和初始化相關(guān)配置依賴的地方宗苍,配置好所需的依賴薄榛,就可以應(yīng)用插件了:
apply plugin:'com.android.application'
如果沒(méi)有提前在buildscript里配置依賴的classpath讳窟,會(huì)提示找不到這個(gè)插件
-
- 分析:
-
使用plugins DSL應(yīng)用插件
-
plugins DSL是一種新的插件應(yīng)用方式,Gradle 2.1以上版本才可以使用敞恋。目前這個(gè)功能還在內(nèi)測(cè)
plugins { id 'java' }
這樣就應(yīng)用了java插件丽啡,看著更簡(jiǎn)潔,符合DSL規(guī)范
-
如果該插件已經(jīng)被托管在https://plugins.gradle.org/網(wǎng)站上硬猫,我們就不用再buildscript里配置classpath依賴了补箍,直接使用plugins就可以應(yīng)用插件:
plugins { id 'org.snoarqube' version '1.2' }
-
-
自定義插件
自定義插件必須要實(shí)現(xiàn)Plugin接口改执,這個(gè)接口只有一個(gè)apply方法,該方法在插件被應(yīng)用的時(shí)候執(zhí)行坑雅。所以我們可以實(shí)現(xiàn)這個(gè)方法辈挂,做我們想做的事情,比如這里創(chuàng)建一個(gè)名稱為ex53CustomTask的任務(wù)給項(xiàng)目用
-
實(shí)例:
apply plugin:Ex53CustomPlugin class Ex53CustomPlugin implements Plugin<Project>{ void apply(Project project){ project.task('ex53CustomTask') << { println "這是一個(gè)通過(guò)自定義插件方式創(chuàng)建的任務(wù)" } } }
-
運(yùn)行結(jié)果:
3$ gradle ex53 Starting a Gradle Daemon (subsequent builds will be faster) > Task :ex53CustomTask 這是一個(gè)通過(guò)自定義插件方式創(chuàng)建的任務(wù)
以上是我們定義的一個(gè)簡(jiǎn)單的插件霞丧,是定義在build.gradle腳本里,只能是自己的項(xiàng)目使用
-
創(chuàng)建一個(gè)Groovy工程冕香,然后配置我們插件開發(fā)所需的依賴:
-
實(shí)例:
apply plugin:'Groovy' dependencies{ compile gradleApi() compile localGroovy() } //然后實(shí)現(xiàn)插件類 package com.github.rujews.plugins import org.gradle.api.Plugin import org.gradle.api.Project class Ex53CustomPlugin implements Plugin<Project>{ void apply(Project project){ project.task('ex53CustomTask') << { println "這是一個(gè)通過(guò)自定義插件方式創(chuàng)建的任務(wù)" } } }
每一個(gè)插件都有一個(gè)唯一的Plugin ID蛹尝,以供使用者使用,現(xiàn)在我們定義這個(gè)plugin id悉尾。Gradle
-