你做好web应用的原型,向你的同事展示,他们说想要加入你的开发团队,给你的应用添加更多的高级特性让它更上一层。代码已经被提交到版本控制系统中,所以他们把代码下载下来就可以开始工作了。
有同事从来没有使用过Gradle,所以他询问你怎么在机器上安装Gradle运行时和用什么版本。因为他没有安装过Gradle,所以他也关心在window上安装和在Mac上安装有什么不同。根据使用其他构建工具的经验,这同事意识到如果选错构建工具的版本或者运行时环境可能对构建结果带来不好的影响。在本机上运行成功,但是在别的机器上运行失败,实在太平常了。在煎熬了好几个小时后,他发现原因是运行时版本不兼容。
针对这个问题,Gradle提供了一个非常方便和实用的解决方案:Gradle包装器。它是Gradle的核心特性,能够让机器在没有安装Gradle运行时的情况下运行Gradle构建。它也让构建脚本运行在一个指定的Gradle版本上。它是通过自动从中心仓库下载Gradle运行时,解压和使用来实现的。最终的目标是创造一个独立于系统,系统配置和Gradle版本的可靠和可重复的构建。
注:什么时候用包装器?使用包装器被认为是最佳实践,对每一个Gradle项目都是必需的。由包装器支持的Gradle脚本非常适合作为自动化发布过程的一部分,比如持续集成和交付。
配置包装器
在项目中配置包装器,你只需要做两件事情:创建一个包装器任务和执行任务生成包装器文件。为了能够让项目可以下载压缩过的Gradle运行时文件,定义一个类型为 Wrapper 的任务,通过gradleVersion属性指定你想要使用的Gradle版本:
task wrapper(type: Wrapper){
gradleVersion = '1.7'
}
不要求该任务的名字为wrapper——任何名字都可以。然而,wrapper这个名字通常在Gradle的在线文档中使用,并且作为默认约定。执行任务:
$ gradle wrapper
结果是,你会发现包装器文件在构建脚本的旁边。记住,你只需要在项目中运行一次 gradle wrapper 命令。从那时开始,你就可以用包装器的脚本执行构建了。下载下来的包装器文件应该提交到版本控制系统中。为了记录构建使用过包装器,将wrapper任务保留在项目中也是有用的。通过改变gradleVersion的值和重新运行wrapper任务,它会帮助你升级包装器的版本。
使用包装器
作为包装器发布内容的一部分,它提供了一个命令执行脚本。对于*nix系统,它是一个叫作 gradlew 的shell脚本;对于window操作系统,它是gradlew.bat。示例:
$ gradlew jettyRun
定制包装器
某些企业有非常严格的安全策略,特别是当你为政府机构工作时,访问外网是禁止的。在这种情况下,如何让你的项目使用Gradle包装器呢?重新配置。你可以改变默认配置,将它指向一个存有运行时发布文件的企业内部服务器。同时你还可以改变本地的存储路径:
task wrapper(type:Wrapper) {
gradleVersion = '1.2' //Gradle版本号
distributionUrl = ' //获取Gradle包装器的URL
distributionPath = 'gradle-dists' //包装器被解压缩后存放的相对路径
}
包装器还有很多可用的选项,你可以在Gradle包装器的DSL文档。