Gradle在Java開(kāi)發(fā)中可以作為項(xiàng)目構(gòu)建工具问词,相比于Maven,Gradle構(gòu)建更加快速恨豁,沒(méi)有復(fù)雜的xml文件嚣镜,取而代之的是通過(guò)腳本完成諸如依賴管理,項(xiàng)目構(gòu)建配置橘蜜,插件配置等功能菊匿。
Gradle官網(wǎng)提供了詳細(xì)的文檔,Gradle Document计福,本文記錄的是個(gè)人在學(xué)習(xí)以及使用Gradle過(guò)程中跌捆,使用到的特性以及遇到問(wèn)題的解決辦法。
-
Gradle project結(jié)構(gòu)
image.png - Gradle常用命令
- 初始化Gradle項(xiàng)目
gradle init
- 初始化Gradle項(xiàng)目
$ gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 3
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 3
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4]
Project name (default: demo):
Source package (default: demo):
BUILD SUCCESSFUL
2 actionable tasks: 2 executed
構(gòu)建Gradle項(xiàng)目
gradle build
如果項(xiàng)目中包含了warpper script象颖,更建議使用
./gradlew build
gradle.properties - Gradle運(yùn)行環(huán)境配置
當(dāng)我們想配置一些本地的環(huán)境變量或者針對(duì)gradle build做一些配置的時(shí)候佩厚,可以使用gradle.properties配置文件,下面是一些開(kāi)發(fā)中的例子说订。
- 本地jdk環(huán)境是jdk8, 但是想讓Gradle在jdk11環(huán)境下編譯
在project root下添加gradle.properties文件抄瓦,增加如下配置
org.gradle.java.home=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
gradle.properties支持多種配置方式,如果在多個(gè)地方均配置有properties文件陶冷,優(yōu)先級(jí)如下:
- system properties, e.g. when -Dgradle.user.home is set on the command line.
- gradle.properties in GRADLE_USER_HOME directory.
- gradle.properties in project root directory.
- gradle.properties in Gradle installation directory.
其他的關(guān)于build的詳細(xì)配置钙姊,可以參考官網(wǎng)Build Enviroment
- build.gradle - 使用Gradle管理依賴
Gradle可以使用Maven倉(cāng)庫(kù),如果想在項(xiàng)目中優(yōu)先使用本地倉(cāng)庫(kù)埂伦,可以在
repositories
中加入mavenLocal()
當(dāng)需要添加某項(xiàng)依賴時(shí)摸恍,首先可以去https://search.maven.org/ 或https://mvnrepository.com/檢索相應(yīng)的依賴包,選擇想要的版本赤屋,然后復(fù)制對(duì)應(yīng)的gradle路徑即可立镶,以下兩種方式是等效的。
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.14.0'
implementation 'org.apache.logging.log4j:log4j-core:2.14.0'
plugins {
id 'org.springframework.boot' version '2.4.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'io.leo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.alibaba:fastjson:1.2.75'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.14.0'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
test {
useJUnitPlatform()
}
- IDEA gradle 插件
使用 Idea Plugin 类早,執(zhí)行命令./gradlew ideaModule
即可生成項(xiàng)目下各個(gè) module 的 iml文件媚媒,目的是讓 Idea 識(shí)別各個(gè) module 為 gradle的 project
參考: https://docs.gradle.org/current/userguide/idea_plugin.html