一 項目的構建
兩個基本概念:項目(project)和任務(task)
關系: 一個構建至少包含一個項目、一個項目可包含多的任務,項目與項目 項目中任務與任務都可以建立依賴關系
項目:
一個項目代表一個構建的組件(如jar文件),當構建啟動時,gradle會根據build.gradle實例化一個org.gradle.api.Project類
屬性:
group name version 確定唯一個組件
apply dependencies repositories task
ext
gradle.properties 存項目公共屬性
任務(org.gradle.api.Task):
任務動作:定義一個任務動作的執行順序
- doFirst:task執行時,最開始的操作
- doLast(<<):task執行時,最后的操作
依賴:定義任務與任務之間的依賴關系
dependsOn

二 生命周期
構建的生命周期包括:初始化、配置、執行,並且對每個階段完成后都有一個hook方法,可自定義處理邏輯
- 初始化: 首先尋找一個叫settings.gradle的文件,檢查是否當前構建是否是多項目構建,並負責創建項目樹,即為參與構建的每個工程創建一個 project 實例,並隱式可用
- 配置:此階段,對 project 對象進行配置,屬於構建的所有 projects 的構建腳本都會被執行,執行的代碼可分為配置代碼和動作代碼(任務行為的定義),確定任務的依賴關系及執行順序
- 執行:按照配置階段的任務順序進行執行


三 依賴管理
工件坐標 group name version
常用倉庫
mavenLocal/mavenCentral/jcenter
自定義maven倉庫
文件倉庫
repositories {
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
mavenLocal()
mavenCentral()
jcenter()
}

依賴沖突解決策略(沖突時gradle默認使用最新的版本)
- 1、查看依賴報告
- 2、排除傳遞性依賴
- 3、強制一個版本
configurations.all{
resolutionStrategy{
failOnVersionConflict()
force 'org.slf4j:slf4j-api:1.7.22'
}
}
dependencies {
compile('org.hibernate:hibernate-core:3.6.3.Final') {
exclude group: "org.slf4j", module: "slf4j-api"
}
testCompile group: 'junit', name: 'junit', version: '4.11'
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.1'
}


四 多項目構建

項目總控制bulid.gradle文件
allprojects{ //主項目定義
apply plugin: 'java'
apply plugin: 'war'
sourceCompatibility = 1.8
}
subprojects{ //子項目中同一定義
repositories {
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
mavenLocal()
mavenCentral()
}
dependencies {
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.1'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
}
model模塊 中文件 bulid.gradle 不用定義
repository模塊bulid.gradle
dependencies {
compile project(":model")
}
web模塊bulid.gradle
apply plugin:'war'
dependencies {
compile project(":repository")
}
五 自動化測試



六 發布
allprojects{
apply plugin: 'java'
apply plugin: 'war'
sourceCompatibility = 1.8
apply plugin: 'maven-publish'
publishing{
publications{
myPublish(MavenPublication){
from components.java
groupId 'com.yincai.gradle'
}
}
repositories {
maven{
name 'myRepo'
url ''
}
}
}
}

備注:自定義Task實例
def creatdir = { path -> File dir = new File(path) dir.mkdirs() } task makeJavaDir{ def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources',] doFirst{ paths.forEach(creatdir) } } task makeWebDir{ dependsOn 'makeJavaDir' def paths = ['src/main/webapp','src/test/webapp'] doLast{ paths.forEach(creatdir) } } //Gradle可以在沒有安裝Gradle的情況下使用,這時候就需要Gradle Wrapper了。Gradle Wrapper其實就是一個腳本文件,它會在沒有安裝Gradle的情況下為我們下載Gradle,之后我們就可以使用gradlew命令,像使用gradle一樣來使用Gradle了
//生成wrapper任務
task wrapper(type: Wrapper){ gradleVersion = '3.0' }
