Gradle的基本使用
一、Gradle相比Maven的優(yōu)勢
- 配置簡潔
Maven是用pom.xml管理,引入一個jar包至少5行代碼,Gradle只需要一行。
- 構(gòu)建速度快
Gradle支持daemon方式運行,啟動速度快,同時有基于daemon的增量構(gòu)建,充分利用JVM的運行時優(yōu)化,和緩存數(shù)據(jù)構(gòu)建速度相比Maven快很多。
- 更好的靈活性、擴(kuò)展性
Gradle 相對于 Maven 等構(gòu)建工具, 其提供了一系列的 API 讓我們有能力去修改或定制項目的構(gòu)建過程。
二、基本配置
- 設(shè)置本地倉庫地址
默認(rèn)本地倉庫地址是:~/.gradle,Windows下會占用大量C盤空間。
設(shè)置環(huán)境變量,GRADLE_USER_HOME=/your/path
- 復(fù)用Maven本地倉庫
在repositories配置mavenLocal()即可,如果是init.gradle全局配置,參考以下init.gradle文件
Maven本地倉庫查找路徑:
(1)USER_HOME/.m2/settings.xml
(2)M2_HOME/conf/settings.xml
(3)USER_HOME/.m2/repository
- 國內(nèi)鏡像加速
國內(nèi)訪問國外倉庫地址很慢,第一種方法是在每個項目中設(shè)置repositories
repositories {
mavenLocal()
'maven(http://maven.aliyun.com/nexus/content/groups/public/)'
mavenCentral()
}
更推薦的方式是類似的Maven的settings.xml全局的配置,在上一步配置的GRADLE_USER_HOME路徑下,添加init.gradle文件,以下配置文件中使用了阿里云的Gradle代理,支持jcenter、google、maven倉庫。
gradle.projectsLoaded {
rootProject.allprojects {
buildscript {
repositories {
def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def NEXUS_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
all { ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
println("buildscript ${repo.url} replaced by $JCENTER_URL.")
remove repo
}
else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
remove repo
}
else if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url JCENTER_URL
}
google {
url GOOGLE_URL
}
maven {
url NEXUS_URL
}
}
}
repositories {
def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def NEXUS_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
all { ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
println("buildscript ${repo.url} replaced by $JCENTER_URL.")
remove repo
}
else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
remove repo
}
else if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url JCENTER_URL
}
google {
url GOOGLE_URL
}
maven {
url NEXUS_URL
}
}
}
}
三、最佳實踐
- 多模塊配置
稍微大點的項目都會分模塊開發(fā),Gradle相比Maven的一個優(yōu)勢是用IDEA執(zhí)行一個項目的代碼時,會自動編譯其依賴的其他模塊。
在項目一級目錄下添加settings.gradle配置文件:
rootProject.name = 'my-roject-name' include 'module1' include 'module2'
其中module1、module2就是子模塊的文件夾名,在子模塊里需要有一個配置子模塊的build.gradle
模塊內(nèi)依賴,比如module2依賴module1,在module2的build.gradle配置文件里添加:
dependencies {
compile project(":module1")
}
- profile支持
profile用來加載不同環(huán)境的的配置文件,在筆者所在公司,推薦dev、test、staging、prod四套環(huán)境。
添加gradle.properties配置文件指定默認(rèn)profile
profile=dev
啟動profile,加載不同路徑下的配置,在build.gradle里添加配置:
ext {
profile = project['profile']
}
sourceSets {
main {
resources {
srcDirs = ["src/main/resources/", "src/main/profiles/${profile}"]
}
}
}
命令行參數(shù)指定profile:
gradle build -Pprofile=prod
- 初始化gradle項目
安裝gradle,并在項目頂級目錄下執(zhí)行:
gradle init
如果當(dāng)前目錄有pom.xml,接下來會提示是否從Maven項目初始化Gradle項目,選擇yes回車執(zhí)行。
參數(shù)文檔:https://docs.gradle.org/current/userguide/build_init_plugin.html
- 引入bom文件
pom文件在Maven中是一個很有用的功能,方便多個項目統(tǒng)一版本號,在Maven中配置方式如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Gradle有插件支持類似操作:
//引入插件
plugins {
id "io.spring.dependency-management" version "1.0.10.RELEASE"
}
//引入bom
dependencyManagement {
imports {
mavenBom 'org.springframework.boot:spring-boot-dependencies:${spring-boot.version}'
}
}
//使用bom,不需要執(zhí)行版本號
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web"
}
- 引入parent文件
在maven中執(zhí)行parent是管理多個項目常用的方式,parent指定了項目的基本配置,配置方式如下:
<parent> <groupId>com.lesofn.blog</groupId> <artifactId>test-parent</artifactId> <version>0.0.1</version> </parent>
Maven中的parent有兩個作用,一個是類似bom的統(tǒng)一管理版本,即parent中的:dependencyManagement,另一個是基礎(chǔ)jar包的引用,即父pom中的:dependencies
在Gradle可通過上面的io.spring.dependency-management插件實現(xiàn)類似的效果:
//引入插件
plugins {
id "io.spring.dependency-management" version "1.0.10.RELEASE"
}
//引入parent,實現(xiàn)maven中dependencyManagement的功能,不用指定版本號
dependencyManagement {
imports {
mavenBom 'com.lesofn.blog:test-parent:0.0.1'
}
}
//再次引入parent,實現(xiàn)maven中dependencies的功能
dependencies {
implementation 'com.lesofn.blog:test-parent:0.0.1'
}
四、總結(jié)
經(jīng)過以上配置,基本覆蓋了Gradle開發(fā)過程中的大部分問題,如果還有什么問題,歡迎留言討論。
以上就是Gradle的基本使用的詳細(xì)內(nèi)容,更多關(guān)于Gradle 使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解SpringBoot2 使用Spring Session集群
這篇文章主要介紹了SpringBoot2 使用Spring Session集群,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-04-04
關(guān)于spring中bean注冊的優(yōu)先級分析
Spring框架中,Bean的定義方式主要有三種:XML定義、注解掃描和配置類中的@Bean注解,在Bean注冊過程中,XML定義的GenericBeanDefinition優(yōu)先級最高2024-09-09
java如何用Processing生成馬賽克風(fēng)格的圖像
這篇文章主要介紹了如何用java如何用Processing生成馬賽克風(fēng)格的圖像,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Java編程實現(xiàn)統(tǒng)計一個字符串中各個字符出現(xiàn)次數(shù)的方法
這篇文章主要介紹了Java編程實現(xiàn)統(tǒng)計一個字符串中各個字符出現(xiàn)次數(shù)的方法,涉及java針對字符串的遍歷、判斷、運算等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
從繁瑣到簡潔的Jenkins?Pipeline腳本優(yōu)化實踐
這篇文章主要為大家介紹了從繁瑣到簡潔的Jenkins?Pipeline腳本優(yōu)化實踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Java多線程并發(fā)synchronized?關(guān)鍵字
這篇文章主要介紹了Java多線程并發(fā)synchronized?關(guān)鍵字,Java?在虛擬機層面提供了?synchronized?關(guān)鍵字供開發(fā)者快速實現(xiàn)互斥同步的重量級鎖來保障線程安全。2022-06-06
Springcloud Config支持本地配置文件的方法示例
這篇文章主要介紹了Springcloud Config支持本地配置文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

