一文读懂Gradle与Gradle Wrapper的关系
1、Gradle与Gradle Wrapper的关系
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。通俗的来说,Gradle主要用于工程的管理,帮我们自动化的实现依赖、打包、部署、发布等各种项目管理工作。
因为gradle处于快速迭代阶段,经常发布新版本,如果我们的项目直接去使用,每个人的版本各异,那么更改版本等会变得无比麻烦。很可能会出现,每个项目有可能用不一样的gradle版本,这样去手动配置每一个项目对应的gradle版本就会变得麻烦。后来,人们开发了gradle-wrapper,wrapper的意思"包装"。引入gradle-wrapper,通过读取配置文件中gradle的版本,为每个项目自动的下载和配置gradle。
不仅gradle本身版本更替频繁,连gradle命令行也是善变的,所以wrapper对命令行也进行了一层封装,使用统一的gradlew命令,wrapper会自动去执行具体版本对应的gradle命令。
说到这里大家应该知道了gradle与gradle wrapper的关系了吧。当我们使用gradle管理项目,如果某天想把这个项目跑在某个没有安装gradle的主机上,该怎么办呢?可以看下面的案例介绍。
当我们平时使用gradle来构建项目的时候,先在电脑上安装gradle,然后配置环境变量之后就能正常使用了。不过当我们把项目分享给一个电脑上没安装gradle的人时,整体的项目构建还需要配置,显得麻烦。由此就有了今天的主角:gradle wrapper。它是一个gradle的封装体,即使电脑上没有安装gradle也能构建。
想让其他的用户使用gradle wrapper,首先要在你的项目中创建它。具体来说,就是在build.gradle里面加入类似于下面的task:
//build.gradle 文件
task createWrapper(type: Wrapper) {
gradleVersion = '0.9-preview-1'
}
//上文的版本根据需要填写即可。
然后执行:
gradle createWrapper
当前目录下会生成以下目录结构:
真正相关的文件就是下面所列出来的:
Project-name/
gradlew
gradlew.bat
gradle/wrapper/
gradle-wrapper.jar
gradle-wrapper.properties
这些文件构成了gradle wrapper,生成gradle wrapper的操作只需要做一次。
2、gradle wrapper使用
需要使用gradle wrapper的时候,我们就直接在项目根目录下直接执行gradlew(gradle wrapper的简写),使用gradlew的方式和gradle一模一样。例如,通过gradlew tasks来查看所有的任务。事实上,执行gradlew命令的时候,gradlew会委托gradle命令来做相应的事情,所以gradlew真的只是一个壳而已。
当执行gradlew的时候,wrapper会检查当前机器是否已经安装了对应版本的gradle,如果安装了那么gradlew就会委托gradle执行用户输入的命令。如果还未安装的话,那么首先会自动帮我们从gradle repository下载安装。当然你也可以在配置文件中指定想要下载的仓库地址来替代默认的gradle repo。