第1 部分 Gradle 介紹 1
1 項目自動化介紹 3
1.1 沒有項目自動化的生活 4
1.2 項目自動化的好處 5
1.2.1 防止手動介入 5
1.2.2 創建可重復的構建 5
1.2.3 讓構建便攜 5
1.3 項目自動化的類型 6
1.3.1 按需構建 6
1.3.2 觸發構建 7
1.3.3 預定構建 7
1.4 構建工具 8
1.4.1 什麼是構建工具 9
1.4.2 構建工具的剖析 10
1.5 Java 構建工具 12
1.5.1 Apache Ant 12
1.5.2 Apache Maven 16
1.5.3 對下一代構建工具的需求 19
1.6 總結 20
2 下一代構建工具:Gradle 23
2.1 為什麼要用Gradle,為什麼是現在 24
2.1.1 Java 構建工具的演變 25
2.1.2 為什麼應該選擇Gradle 27
2.2 Gradle 引人注目的特性集 29
2.2.1 可錶達性的構建語言和底層的API 29
2.2.2 Gradle 就是Groovy 31
2.2.3 靈活的約定 32
2.2.4 魯棒和強大的依賴管理 33
2.2.5 可擴展的構建 34
2.2.6 輕鬆的可擴展性 34
2.2.7 和其他構建工具集成 35
2.2.8 社區和公司的推動 36
2.2.9 錦上添花:額外的特性 36
2.3 更大的場景:持續交付 36
2.3.1 從構建到部署自動化項目 37
2.4 安裝Gradle 38
2.5 開始使用Gradle 40
2.6 使用Gradle 的命令行 42
2.6.1 列齣項目中所有可用的task 43
2.6.2 任務執行 44
2.6.3 命令行選項 46
2.6.4 Gradle 守護進程 47
2.7 總結 48
3 通過範例學習構建Gradle 項目 49
3.1 介紹學習案例 50
3.1.1 To Do 應用程序 50
3.1.2 任務管理用例 50
3.1.3 檢查組件交互 51
3.1.4 構建應用功能 52
3.2 構建Java 項目 55
3.2.1 使用Java 插件 55
3.2.2 定製你的項目 59
3.2.3 配置和使用外部依賴 60
3.3 用Gradle 做Web 開發 62
3.3.1 添加Web 組件 62
3.3.2 使用War 和Jetty 插件 64
3.4 Gradle 包裝器 69
3.4.1 配置包裝器 70
3.4.2 使用包裝器 71
3.4.3 定製包裝器 73
3.5 總結 73
第2 部分 掌握基本原理 75
4 構建腳本概要 77
4.1 構建塊 78
4.1.1 項目 78
4.1.2 任務 80
4.1.3 屬性 80
4.2 使用task 82
4.2.1 項目版本管理 82
4.2.2 聲明task 動作 83
4.2.3 訪問DefaultTask 屬性 84
4.2.4 定義task 依賴 85
4.2.5 終結器task 86
4.2.6 添加任意代碼 87
4.2.7 理解task 配置 87
4.2.8 聲明task 的inputs 和outputs 90
4.2.9 編寫和使用自定義task 92
4.2.10 Gradle 的內置task 類型 95
4.2.11 task 規則 97
4.2.12 在buildSrc 目錄下構建代碼 100
4.3 掛接到構建生命周期 101
4.3.1 掛接到task 執行圖 103
4.3.2 實現task 執行圖監聽器 103
4.3.3 初始化構建環境 4.4 總結 106
5 依賴管理 107
5.1 依賴管理概述 108
5.1.1 不完善的依賴管理技術 108
5.1.2 自動化依賴管理的重要性 108
5.1.3 使用自動化依賴管理 110
5.1.4 自動化依賴管理的挑戰 110
5.2 通過例子學習依賴管理 112
5.3 依賴配置 113
5.3.1 理解配置API 錶示 113
5.3.2 自定義配置 114
5.3.3 訪問配置 115
5.4 聲明依賴 115
5.4.1 理解依賴API 錶示 116
5.4.2 外部模塊依賴 117
5.4.3 文件依賴 121
5.5 使用和配置倉庫 122
5.5.1 理解倉庫API 錶示 123
5.5.2 Maven 倉庫 124
5.5.3 Ivy 倉庫 126
5.5.4 扁平的目錄倉庫 126
5.6 理解本地依賴緩存 127
5.6.1 分析緩存結構 127
5.6.2 顯著的緩存特性 129
5.7 解決依賴問題 130
5.7.1 應對版本衝突 130
5.7.2 強製指定一個版本 131
5.7.3 使用依賴觀察報告 131
5.7.4 刷新緩存 132
5.8 總結 133
6 多項目構建 135
6.1 模塊化項目 136
6.1.1 耦閤與內聚 136
6.1.2 模塊劃分 137
6.1.3 模塊化重構 138
6.2 組裝多項目構建 139
6.2.1 settings 文件介紹 140
6.2.2 理解settings API 錶示 141
6.2.3 settings 執行 142
6.2.4 獲取settings 文件 142
6.2.5 分層布局與扁平布局 143
6.3 配置子項目 144
6.3.1 理解Project API 錶示 145
6.3.2 定義特定的行為 146
6.3.3 聲明項目依賴 147
6.3.4 多項目部分構建 149
6.3.5 聲明跨項目的task 依賴 151
6.3.6 定義公共行為 153
6.4 獨立的項目文件 154
6.4.1 為每個項目創建構建文件 155
6.4.2 定義根項目的構建代碼 155
6.4.3 定義子項目的構建代碼 155
6.5 自定義項目 156
6.6 總結 157
7 Gradle 測試 159
7.1 自動化測試 160
7.1.1 自動化測試類型 160
7.1.2 自動化測試金字塔 160
7.2 測試Java 應用程序 161
7.2.1 項目布局 162
7.2.2 測試配置 162
7.2.3 測試task 163
7.2.4 自動化測試檢測 164
7.3 單元測試 164
7.3.1 使用JUnit 164
7.3.2 使用其他的單元測試框架 168
7.3.3 結閤使用多個單元測試框架 170
7.4 配置測試執行 172
7.4.1 命令行選項 173
7.4.2 理解測試API 錶示 174
7.4.3 控製運行時行為 175
7.4.4 控製測試日誌 176
7.4.5 並行執行測試 178
7.4.6 響應測試生命周期事件 179
7.4.7 實現測試監聽器 180
7.5 集成測試 181
7.5.1 引入用例研究 181
7.5.2 編寫測試類 181
7.5.3 在構建中支持集成測試 182
7.5.4 為集成測試建立約定 184
7.5.5 引導測試環境 186
7.6 功能測試 187
7.6.1 引入用例研究 187
7.6.2 在構建中支持功能測試 188
7.7 總結 192
8 擴展Gradle 195
8.1 通過案例學習介紹插件 196
8.1.1 在雲中使用Grade 管理應用 196
8.1.2 設置雲環境 197
8.2 從零起步構建插件 200
8.3 寫一個腳本插件 201
8.3.1 添加CloudBees 的API 類庫 201
8.3.2 在task 中使用CloudBees 的API 202
8.4 編寫定製的task 類 206
8.4.1 定製task 的實現選項 206
8.4.2 在buildSrc 下定義定製任務 207
8.5 使用和構建對象插件 214
8.5.1 使用對象插件 215
8.5.2 解析對象插件 217
8.5.3 編寫對象插件 218
8.5.4 插件擴展機製 219
8.5.5 給插件一個有意義的名字 222
8.5.6 測試對象插件 222
8.5.7 開發和使用獨立的對象插件 224
8.6 總結 226
9 集成與遷移 229
9.1 Ant 與Gradle 230
9.1.1 在Gradle 中使用Ant 腳本功能 231
9.1.2 在Gradle 中使用標準的Ant 任務 237
9.1.3 遷移策略 239
9.2 Maven 和Gradle 242
9.2.1 異同之處 243
9.2.2 遷移策略 246
9.3 比較構建 249
9.4 總結 251
第3 部分 從構建到部署 253
10 IDE 支持和工具 255
10.1 使用IDE 插件生成項目文件 256
10.1.1 使用Eclipse 插件 257
10.1.2 使用IDEA 插件 265
10.1.3 使用Sublime Text 插件 270
10.2 在流行的IDE 中管理Gradle 項目 273
10.2.1 SpringSource STS 對Gradle 的支持 274
10.2.2 IntelliJ IDEA 對Gradle 的支持 278
10.2.3 NetBeans 對Gradle 的支持 280
10.3 使用工具API 集成Gradle 283
10.4 總結 287
11 構建多語言項目 289
11.1 使用Gradle 管理JavaScript 290
11.1.1 處理JavaScript 的典型task 290
11.1.2 在To Do 應用程序中使用JavaScript 291
11.1.3 對JavaScript 庫依賴管理 292
11.1.4 利用第三方Ant task 閤並和壓縮JavaScript 294
11.1.5 將JavaScript 優化作為開發工作流的一部分 296
11.1.6 使用外部的Java 庫分析JavaScript 代碼 297
11.1.7 使用第三方Gradle JavaScript 插件 299
11.1.8 在Gradle 中使用Grunt 300
11.2 構建基於JVM 的多語言項目 303
11.2.1 JVM 語言插件的基本功能 303
11.2.2 構建Groovy 項目 305
11.2.3 構建Scala 項目 310
11.3 其他語言 314
11.4 總結 315
12 代碼質量管理和監測 317
12.1 將代碼分析集成到構建中 318
12.2 衡量代碼覆蓋率 319
12.2.1 探索代碼覆蓋率工具 320
12.2.2 使用JaCoCo 插件 322
12.2.3 使用Cobertura 插件 324
12.3 執行靜態代碼分析 326
12.3.1 探討靜態代碼分析工具 327
12.3.2 使用Checkstyle 插件 329
12.3.3 使用PMD 插件 331
12.3.4 使用FindBugs 插件 333
12.3.5 使用JDepend 插件 334
12.4 集成Sonar 335
12.4.1 安裝並運行Sonar 337
12.4.2 使用Sonnar Runner 分析項目 338
12.4.3 將代碼覆蓋率報告發布到Sonar 340
12.5 總結 343
13 持續集成 345
13.1 持續集成的好處 346
13.2 安裝Git 348
13.2.1 創建GitHub 賬號 348
13.2.2 forking GitHub 倉庫 349
13.2.3 安裝和配置Git 349
13.3 使用Jenkins 構建項目 350
13.3.1 開始使用Jenkins 350
13.3.2 安裝Git 和Gradle 插件 350
13.3.3 定義build job 352
13.3.4 執行build job 354
13.3.5 添加測試報告 356
13.4 探索基於雲的解決方案 359
13.5 使用Jenkins 創建構建管道 360
13.5.1 創建構建管道的挑戰 360
13.5.2 探索基本的Jenkins 插件 361
13.5.3 配置構建管道 364
13.6 總結 366
14 打包和發布 367
14.1 打包和分發 368
14.1.1 定義附加包 369
14.1.2 創建分發包 371
14.2 發布 374
14.2.1 發布到Maven 倉庫中 375
14.2.2 老的和新的發布機製 376
14.2.3 聲明軟件組件為Maven 發布包 376
14.2.4 發布軟件組件到本地Maven 緩存中 377
14.2.5 聲明自定義的發布包 379
14.2.6 修改所生成的POM 文件 381
14.2.7 發布到本地Maven 倉庫中 383
14.2.8 發布到遠程的Maven 倉庫中 385
14.3 發布到公共的二進製倉庫 388
14.3.1 發布到JFrog Bintray 中 388
14.3.2 發布到Maven Central 392
14.4 打包和發布作為構建管道的一部分 393
14.4.1 構建一次 393
14.4.2 發布一次並重用 394
14.4.3 選擇一個閤適的版本管理方案 395
14.4.4 在可部署包中加入構建信息 398
14.4.5 發布To Do 應用程序WAR 文件 399
14.4.6 擴展構建管道 400
14.5 總結 401
15 基礎環境準備和部署 403
15.1 準備基礎環境 404
15.1.1 基礎設施即代碼 404
15.1.2 使用Vagrant 和Puppet 創建虛擬機 405
15.1.3 從Gradle 執行Vagrant 命令 407
15.2 針對部署環境 409
15.2.1 在Groovy 腳本中定義配置 409
15.2.2 使用Groovy 的ConfigSlurper 讀取配置 411
15.2.3 在構建中使用配置 412
15.3 自動部署 413
15.3.1 從二進製倉庫中獲取包 413
15.3.2 確定必需的部署步驟 415
15.3.3 通過SSH 命令部署 415
15.4 部署測試 420
15.4.1 使用冒煙測試驗證部署成功 420
15.4.2 使用驗收測試驗證應用程序功能 423
15.5 將部署集成到構建管道中 424
15.5.1 自動部署到測試環境 425
15.5.2 部署測試 425
15.5.3 按需部署到UAT 和産品環境 426
15.6 總結 427
A 駕馭命令行 429
B Gradle 用戶所需要瞭解的Groovy 435
索引 447
· · · · · · (
收起)