Gradle 自己提供了一些基本的概念和總體核心的框架,其餘用於描述真實使用場景的均可以經過插件擴展的方式來實現。這樣就能夠經過抽象的方式提供一個核心的框架,其餘具體的功能和業務都經過插件擴展的方式來實現。java
Gradle 內置了不少經常使用的插件,基本知足大部分工做,可是也有一些插件是沒有內置的,這時候就須要咱們擴展示有插件或者自定義插件來達到咱們的目的。好比 Android Gradle 插件就是基於內置的Java插件實現的。android
插件會擴展項目的功能,幫助咱們在項目的構建的過程當中作不少事情:api
這就是插件,咱們只須要按照它約定的方式,使用它提供的任務、方法或者擴展,就能夠對咱們的項目進行構建。網絡
插件的應用都是經過Project.apply()方法完成的。apply有好幾種用法,而且插件也分爲二進制插件和腳本插件。下面咱們分別介紹一下:app
二進制插件就是實現了org.gradle.api.Plugin接口的插件,它們能夠有plugin id。框架
舉例:下面咱們看一下如何應用一個Java插件:maven
apply plugin:'java'
使用上面的語句就能夠把java插件應用到咱們的項目中了,其中‘java’就是Java插件的plugin id,它是惟一的。模塊化
腳本插件的使用方式以下例所示:工具
build.gradle:單元測試
apply from:'version.gradle'
task outVersion {
println("APP版本是:${versionName},版本號是:${versionCode}")
}
version.gradle:
ext {
versionName = '1.3.0'
versionCode = 1
}
容許結果以下:
renhui$ gradle outVersion
> Configure project :
APP版本是:1.3.0,版本號是:1
BUILD SUCCESSFUL in 0s
應用腳本插件,其實就是把腳本加載進來,和二進制插件不一樣的是它使用的是from關鍵字,後面緊跟着一個腳本文件(能夠是本地文件,也能夠是網絡文件)。
腳本插件能幫助咱們把較大較複雜的腳本文件進行分塊、分段整理,它是腳本文件模塊化的基礎。
第三方發佈的做爲jar的二進制插件,咱們在應用的時候,必需要在buildscript{}裏面配置其classpath才能使用,這個不像Gradle爲咱們內置的插件。
好比咱們的Android Gradle插件就屬於Android發佈的第三方插件,若是咱們要使用它就要先配置,示例以下:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
}
}
buildscript{}塊是一個在構建項目以前,爲項目進行前期準備和初始化相關配置依賴的地方,配置好所需的依賴,就能夠應用其提供的插件了。
下面是在app層應用android gradle插件的方式:
apply plugin: 'com.android.application'
若是沒有提早在buildscript裏配置依賴的classpath,則會報錯,提示找不到這個插件。
使用Java Gradle插件咱們可以很輕鬆的構建出一個項目,咱們經常使用的方式就是使用簡稱應用Java Gradle插件:
apply plugin: 'java'
經過以上的配置,Java插件會爲工程添加不少有用的默認設置和約定,好比源代碼的位置,單元測試代碼的位置、資源文件的位置等。
做爲Java項目,咱們不可避免的會依賴不少第三方的Jar,這也是值得提倡的,由於有不少開源的工具和框架可以幫助咱們更加高效的開發。下面咱們就講一下如何配置第三方依賴。
想要使用這些第三方依賴,就須要告訴Gradle如何找到這些依賴,也就是咱們要講的依賴配置。
通常狀況下咱們都是從倉庫中查找咱們須要的Jar包,在Gradle中要配置一個倉庫的Jar依賴,首先咱們得告訴Gradle咱們要是有什麼類型的倉庫,這些倉庫的位置在哪裏,這樣Gradle就知道從哪裏去搜尋咱們依賴的Jar,例如:
respositories {
mavenCentral()
}
以上代碼,咱們配置了一個Maven中心庫,告訴Gradle能夠在Maven中心庫中搜尋咱們依賴的Jar,除此以外,咱們也能夠從jcenter庫、ivy庫、本地Maven庫mavenLocal等中搜尋。因而可知,Gradle支持的倉庫很是豐富,也能夠多個倉庫一塊兒使用。好比一些公共的開源框架能夠從mavenCenteral上下載,一些咱們公司私有的Jar能夠在本身搭建的Maven私服上下載:
respositories {
mavenCentral()
maven {
url 'http://www.mavenurl.com'
}
}
有了倉庫,咱們就能夠經過配置告訴Gradle,咱們須要依賴什麼,例如:
dependencies {
compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.0.1'
}
在上面的例子中,咱們配置了一個okhttp的依賴,其中compile是依賴名稱,它的意思表示咱們在編譯Java源文件時須要依賴okttp,並提供了GAV信息。
可是相對來講,上面的寫法仍是稍顯麻煩的,Gradle爲咱們提供了簡寫的方式:
dependencies {
compile 'com.squareup.okhttp3:okhttp:3.0.1'
}
除了咱們在上面提到的倉庫的三方依賴,咱們還能夠進行項目的依賴以及文件的依賴。
項目依賴示例:
dependencies {
compile project(':example')
}
依賴後,此項目中的Java等類就能夠進行使用了,就像使用本身項目中的類同樣。
文件依賴,通常是依賴一個jar包(出於某些緣由,不能將jar發佈到Maven中心庫中,只能放在項目中),例如:
dependencies {
compile files('libs/example')
}
經過上面的配置,咱們就能成功引入這兩個Jar包了。
但有時候,libs文件裏的類太多了,不能一個個寫,這時候咱們就能夠經過如下的方式配置:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
這樣配置後,libs下的文件夾的擴展名爲jar的都會被依賴,很是方便。