【gradle】從零開始學習
1. 認識
★ 簡單來說就是一款構建工具。其他構件工具 如 Maven ,Ant.
★ gradle 的特色:
① : 宣告式的構建和基於約定的構建 : gradle 的 核心是基於 Groovy 的可擴充套件的特定領域語言 (DSL:Domain Specific Language)
② : 基於程式設計的依賴語言
③ : 結構化的構建
④ : Multi-project builds
⑤ : Gradle is the first build integration tool
⑥ : Groovy
2. 安裝
★ 首先應保證已經安裝 jdk 6 或者以上的版本。
★ gradel 直接下載不需要安裝 ,需要配置環境變數 GRADLE_HOME ,並加入到 PATH 環境變數中去。通過 gradle -v 來驗證是否配置成功
*: 當然可以不用安裝gradle , 可以使用 gradle wrapper 管理 gradle, 下面會有介紹
3. idea(2016.1 ) 建立 gradle 專案流程 (idea 支援 Gradle SDK 1.2 及以後的版本)
① File → new → project → 會出現一個 New Project 的彈出框
② 左側選擇 Gradle → 配置 project SDK(java) 路徑 → 選擇 apply plugin (選擇 java 會整合java 外掛 ,選擇 web 會整合 ‘war’ 外掛) → 點選next
③ 設定專案的 GroupId、ArtifactId 、 Version → 點選 next
④ 選擇建立空的目錄(會自動建立 java,resource,webapp目錄),這裡是設定 gradle 的一些細節 → 點選 next
⑤ 顯示專案名稱、專案地址等 → 點選 finish
關於 idea 的 Gradle Tool Window (通過 view → ToolWindows → Gradle 開啟,如果不存在Gradle 則需要關閉專案重新匯入專案) 參看 : idea 說明文件:
將 Gradle tasks ,以及 build.gradle 中所做的所有改變全部展示在此 ,每次在 build.gradle 中做完修改需要點選同步按鈕進行同步
4. 構建指令碼基礎
4.1 gradle 中圍繞兩個基本概念 :
① projects ( 專案 ) : 每個 gradle 的構建 由一個或者多個 project 組成 ,
② tasks (任務) : 每個 project 由一個或者多個 task 組成。
4.2 hello world
gradle 執行 task 的命令列語法如下 :
gradle [task] //使用本地安裝的 gradle 執行 task
gradlew [task] // 使用 Wrapper 下載的 gradle 執行task ,使用 gradle Wrapper 方便 gradle 的版本管理 ,需要使用的時候執行命令就可以下載,不需要配置
★完整形式
build.gradle
task hello {
doLast { //doLast 為關鍵詞
println 'Hello world!'
}
}
cmd 中執行gradle -q hello //-q 相當於靜默執行
★簡寫形式
task hi << {
println 'Hi!'
}
檢視 專案中 所有可執行的 task :
gradle -q tasks //-q 靜默執行
gradle -q tasks --all
檢視專案的依賴 :
gradle -q dependencies //檢視 root project 的依賴
gradle -q dependencies module:dependencies //檢視 root project 和子專案 module 的依賴
4.3 構建指令碼即程式碼 (基於 Groovy 程式碼,Groovy 和 java 很相似 ,只是 Groovy 比 java 寫法 更簡單) 4.4 task 之間的依賴 ( dependsOn: )
task hi << {
println 'hi'
}
task intr(dependsOn: hi) << {
println 'i`m xlchen'
}
4.8 Project API
★ 標準的 project properties
i.e :
build.gradle
println name //專案名稱
println path //專案絕對路徑
println project.name //專案名稱
cmd 中
gradle -q check //輸出上面的幾個屬性
4.10 宣告變數 :兩種方式
① Local variables : def 關鍵字定義 ,是 groovy 語言中的一個特色
def dest = "dest"
② extra properties :可以用來集中定義jar 包版本
ext {
springVersion = "3.1.0.release"
email = "[email protected]"
}
task exttest << {
println springVersion
println email
}
5. 基於已有的指令碼 執行
5.1 task
★ 執行多個任務 : 每個任務最多執行一次 :無論是命令列中指定多個,還是很強的依賴
gradle compile test //按順序執行compile 任務 和 test 任務
★ 不執行某個任務 : -x 或者 --exclude-task [taskName]
gradle dist -x test //不執行test 任務
5.2 The Gradle Wrapper
★ : 可以不用預先安裝好 gradle , 便於統一 gradle 版本 ,前提是要整合 gradle wrapper ,由以下幾部分組成
· gradlew (Unix shell 指令碼)
· gradlew.bat (windows 批處理檔案)
· gradle / wrapper / gradle-wrapper.jar (wrapper jar)
·gradle / wrapper / gradle-wrapper.properties (wrapper properties) : 這裡記錄了專案中使用到的gradle 的版本
★ : 如果專案中已經設定了 wrapper ,可以執行以下命令下載 gradle ,下載的版本記錄在 gradle-wrapper.properties 中
①windows
gradlew <task>
如:
gradlew idea //前提是已經集成了 idea 外掛 apply plugin 'idea'
② linux / Mac./gradlew <task>
★ : 修改 gradle 的版本命令
gradle wrapper --gradle-version <version>
i.e : gradle wrapper --gradle-version 2.1
當然也可以在 build.gradle 配置檔案中配置task
task wrapper(type: Wrapper){
gradleVersion = '2.0'
}
6 .建立 JVM 專案
引用方式 :
apply plugin:'java'
作用 :
Source sets 的概念 :一起編譯並且執行的一組資原始檔 ,定義了兩種標準的 source sets : main , test;
println sourceSets.main.output.classesDir
println sourceSets['main'].output.classesDir //兩個都是輸出 java 檔案編譯後所存放的檔案目錄
sourceSets.main.output.classesDir = file("bin") //修改輸出目錄 ,file 為 gradle 的建立檔案的 API
編碼的設定
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
project layouts : 如 java 檔案目錄結構 一般是 src/main/java src/main/test/java 等等 ;
Directory Meaning
src/main/java Production Java source
src/main/resources Production resources
src/test/java Test Java source
src/test/resources Test resources
src/sourceSet/java Java source for the given source set
src/sourceSet/resources Resources for the given source set
task : 提供一些 task ;
eg :
gradle build //會編譯並測試 程式碼最後建立 jar 包
gradle clean //清空
gradle check //編譯並測試
各種 task 之間關係如下圖:
★ jar 包依賴管理
增加 Maven 倉庫 : 一個公共的 Maven 倉庫
repositories {
mavenCentral() // maven 的倉庫中心
}
或者
repositorise {
jcenter() // Bintray 的 Jcenter 庫
}
或者其他的遠端倉庫
repositories{
maven {
url "http://repo.mycompany.com/maven2"
}
}
或者本地倉庫
新增依賴
方式 ①
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
方式②
ext {
springVersion = '4.2.2.RELEASE'
}
dependencies {
compile(
'org.springframework:spring-webmvc:' + springVersion,
'org.apache.commons:commons-lang3:3.4',
)
}
注意 : ★ providedCompile 只有 在 提供了外掛 apply plugin : 'war' 時 才可以使用。