內容簡介
Gradle是一個通用的自動化構建工具。其繼承了先驅者Ant和Maven所建立的使用模式,並且允許構建具有表達性、可維護性和容易理解。使用靈活的基於Groovy的DSL,Gradle提供了聲明式的可擴展語言元素,讓你能夠隨心所欲地建模項目需求。《實戰Gradle》是關於使用Gradle實現端到端的項目自動化的綜合指南。從基礎知識開始介紹,具有實踐性,易於閱讀,討論了在實際項目中如何建立高效的完整的構建過程。在這個過程中,涵蓋了一些高級話題,如測試、持續集成和代碼質量監測。你還會體驗到像設定目標環境和部署軟體這樣的具體任務。
內容提要
Gradle 是Java 軟體開發中的自動化構建工具,類似於傳統工具如Ant 和Maven。Gradle 吸收或沿用了Maven 中比較成功的一些實踐,但相對於Maven 或Ant 又有極強的擴展。
《實戰Gradle》(Gradle in Action)全方位地講解了Gradle 工具相關的知識,包括Gradle 的基本知識、自動化構建的基本概念和最佳實踐,以實際案例的方式解釋如何使用Gradle 進行軟體項目構建。除了基礎知識外,由於軟體開發絕對不僅僅是實現業務邏輯代碼,《實戰Gradle》還介紹了一些解決軟體開發中常見問題的實踐,如多語言、多項目構建,Gradle 在持續集成和持續交付中的套用,Gradle 構建JVM 其他語言,以及Gradle 集成JavaScript 構建等。
雲計算和DevOps 的興起,給軟體行業帶來了翻天覆地的變化,《實戰Gradle》對於雲計算平台、開源社區中的一些工具與Gradle 的結合使用也做了相關的介紹。
因為Groovy 用於編寫Gradle 構建配置的DSL,所以為了幫助讀者更好地理解Gradle,《實戰Gradle》還講解了Groovy 的基本知識,雖然不是全方位地講解Groovy,但是理解Gradle 足矣。
圖書目錄
第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