编辑推荐
适读人群:软件构建者。阅读《实战Gradle》的内容,你需要有一定的Java基础,但是不需要有Groovy的相关基础。
Gradle是一个通用的自动化构建工具。其继承了先驱者Ant和Maven所建立的使用模式,并且允许构建具有表达性、可维护性和容易理解。使用灵活的基于Groovy的DSL,Gradle提供了声明式的可扩展语言元素,让你能够随心所欲地建模项目需求。《实战Gradle》是关于使用Gradle实现端到端的项目自动化的综合指南。从基础知识开始介绍,具有实践性,易于阅读,讨论了在实际项目中如何建立高效的完整的构建过程。在这个过程中,涵盖了一些高级话题,如测试、持续集成和代码质量监测。你还会体验到像设置目标环境和部署软件这样的具体任务。《实战Gradle》内容包括:
关于Gradle的综合指南;
真实的实践案例;
从Ant和Maven过渡;
深入讲解插件开发;
使用Gradle实现持续交付。
《实战Gradle》假设读者具有Java基础背景,但是不要求具备Groovy知识。
BenjaminMuschko是Gradleware工程师团队的成员,同时也是很多流行的Gradle插件的作者。
如需下载免费的PDF、ePub和Kindle形式的电子书,《实战Gradle》的拥有者可以访问manning.com/GradleinAction。
内容简介
Gradle是Java软件开发中的自动化构建工具,类似于传统工具如Ant和Maven。Gradle吸收或用了Maven中比较成功的一些实践,但相对于Maven或Ant又有极强的扩展。
《实战Gradle》(GradleinAction)全方位地讲解了Gradle工具相关的知识,包括Gradle的基本识、自动化构建的基本概念和实践,以实际案例的方式解释如何使用Gradle进行软件项目构建。
除了基础知识外,由于软件开发绝对不仅仅是实现业务逻辑代码,书中还介绍了一些解决软件开中常见问题的实践,如多语言、多项目构建,Gradle在持续集成和持续交付中的应用,Gradle构建JVM其他语言,以及Gradle集成JavaScript构建等。
云计算和DevOps的兴起,给软件行业带来了翻天覆地的变化,书中对于云计算平台、开源社区的一些工具与Gradle的结合使用也做了相关的介绍。
因为Groovy用于编写Gradle构建配置的DSL,所以为了帮助读者更好地理解Gradle,《实战Gradle》还讲了Groovy的基本知识,虽然不是全方位地讲解Groovy,但是理解Gradle足矣。作者简介
BenjaminMuschko是Gradleware工程师团队的成员,同时也是很多流行的Gradle插件的作者。精彩书评
“一本指南。”
—摘自HansDockter之序,Gradle和Gradleware的创建者
“自动化构建的新方式,你永远不会怀念旧的。”
—NachoOrmeno,startupXplore
“多语言程序员必读!”
—RobBugh,ReachForce
“的Gradle参考!充满了真实案例。”
—WellingtonR.Pinheiro巴西沃尔玛电商
“帮助所有开发者使用Gradle所缺少的一《实战Gradle》。”
—SamuelBrown,Blackboard,Inc.
目录
第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.5Java构建工具12
1.5.1ApacheAnt12
1.5.2ApacheMaven16
1.5.3对下一代构建工具的需求19
1.6总结20
2 下一代构建工具:Gradle23
2.1为什么要用Gradle,为什么是现在24
2.1.1Java构建工具的演变25
2.1.2为什么应该选择Gradle27
2.2Gradle引人注目的特性集29
2.2.1可表达性的构建语言和底层的API29
2.2.2Gradle就是Groovy31
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安装Gradle38
2.5开始使用Gradle40
2.6使用Gradle的命令行42
2.6.1列出项目中所有可用的task43
2.6.2任务执行44
2.6.3命令行选项46
2.6.4Gradle守护进程47
2.7总结48
3 通过范例学习构建Gradle项目49
3.1介绍学习案例50
3.1.1ToDo应用程序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.4Gradle包装器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使用task82
4.2.1项目版本管理82
4.2.2声明task动作83
4.2.3访问DefaultTask属性84
4.2.4定义task依赖85
4.2.5终结器task86
4.2.6添加任意代码87
4.2.7理解task配置87
4.2.8声明task的inputs和outputs90
4.2.9编写和使用自定义task92
4.2.10Gradle的内置task类型95
4.2.11task规则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.2Maven仓库124
5.5.3Ivy仓库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.1settings文件介绍140
6.2.2理解settingsAPI表示141
6.2.3settings执行142
6.2.4获取settings文件142
6.2.5分层布局与扁平布局143
6.3配置子项目144
6.3.1理解ProjectAPI表示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测试task163
7.2.4自动化测试检测164
7.3单元测试164
7.3.1使用JUnit164
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 扩展Gradle195
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的API202
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.1Ant与Gradle230
9.1.1在Gradle中使用Ant脚本功能231
9.1.2在Gradle中使用标准的Ant任务237
9.1.3迁移策略239
9.2Maven和Gradle242
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使用SublimeText插件270
10.2在流行的IDE中管理Gradle项目273
10.2.1SpringSourceSTS对Gradle的支持274
10.2.2IntelliJIDEA对Gradle的支持278
10.2.3NetBeans对Gradle的支持280
10.3使用工具API集成Gradle283
10.4总结287
11 构建多语言项目289
11.1使用Gradle管理JavaScript290
11.1.1处理JavaScript的典型task290
11.1.2在ToDo应用程序中使用JavaScript291
11.1.3对JavaScript库依赖管理292
11.1.4利用第三方Anttask合并和压缩JavaScript294
11.1.5将JavaScript优化作为开发工作流的一部分296
11.1.6使用外部的Java库分析JavaScript代码297
11.1.7使用第三方GradleJavaScript插件299
11.1.8在Gradle中使用Grunt300
11.2构建基于JVM的多语言项目303
11.2.1JVM语言插件的基本功能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集成Sonar335
12.4.1安装并运行Sonar337
12.4.2使用SonnarRunner分析项目338
12.4.3将代码覆盖率报告发布到Sonar340
12.5总结343
13 持续集成345
13.1持续集成的好处346
13.2安装Git348
13.2.1创建GitHub账号348
13.2.2forkingGitHub仓库349
13.2.3安装和配置Git349
13.3使用Jenkins构建项目350
13.3.1开始使用Jenkins350
13.3.2安装Git和Gradle插件350
13.3.3定义buildjob352
13.3.4执行buildjob354
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发布到JFrogBintray中388
14.3.2发布到MavenCentral392
14.4打包和发布作为构建管道的一部分393
14.4.1构建一次393
14.4.2发布一次并重用394
14.4.3选择一个合适的版本管理方案395
14.4.4在可部署包中加入构建信息398
14.4.5发布ToDo应用程序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用户所需要了解的Groovy435
索引447精彩书摘
序
当你在创建一套类似于Gradle这样的新技术时,开发过程中最关键的部分往往不是写代码。一旦项目的初期版本被数以千计的开发者使用,一个社区开始围绕该项目组建,挑战就变成了与更多关注者进行交流。他们会使用你的项目,会对项目的优缺点进行评价,而社区的大小也会成十倍或千倍的增长。Gradle已经拥有了一大批关注者,而且在过去的两年里,我们已经看到人数有巨大的增长,而我们也准备迎接更多的用户。
因此,一点也不夸张地说,拥有一本好书是多么的重要。掌握多种技术和能力的开发者都希望有一本通俗易懂的书,它能够讲解语法和工具背后的哲理。因为只有这样,开发者才有信心通过这本唯一的Gradle权威参考书让社区成长。《实战Gradle》就是这样一《实战Gradle》。不仅如此,这《实战Gradle》还让Gradle的新用户有机会去了解,Gradle是如何适应到持续交付这样更广阔的领域中的。
《实战Gradle》的作者Benjamin,是你希望能够从开源社区中闪现出来的一类专家。他是Gradle的长期贡献者,也是多个Gradle流行插件的作者。他拥有传播者和开发者两种角色。Benjamin拥有一种很少见的能力,能够深入到一个特定开发挑战的核心细节中,我们并向用户解释这些细节。他在最近加入了Gradleware,并成为Gradle开发团队的一员,我们感到非常的高兴。
我真心希望你能够喜欢这《实战Gradle》,也享受在工作中使用Gradle。祝你的软件交付过程变得有趣而且有效。
HansDockter,
GradleandGradleware创始人