Gradle Wrapper

当把本地一个项目放入到远程版本库的时候,如果这个项目是以gradle构建的,那么其他人从远程仓库拉取代码之后如果本地没有安装过gradle会无法编译运行,如果对gradle不熟悉,会使得无法很好的去快速构建项目代码。所以gradle可以自动生成一键运行的脚本,把这些一起上传远程仓库,使得即使没有安装gradle也可以自动去安装并且编译项目代码。

  • Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。
  • Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。

简单的gradle wrapper生成

【gradle wrapper生成】

我们在新建的目录下使用命令行输入gradle wrapper命令:

 
 

在新建的目录下可以看到以下文件:

 
 
 
 

【gradle wrapper文件说明】

|____gradle
| |____wrapper
| | |____gradle-wrapper.jar //具体业务逻辑
| | |____gradle-wrapper.properties //配置文件
|____gradlew //Linux 下可执行脚本
|____gradlew.bat //Windows 下可执行脚本

(1)gradlew.bat

gradlew.bat是bat 脚本,Windows 用户可以通过它执行 Gradle 任务,配合gradle文件夹使用。

而Linux使用的是gradlewgradlew是一个shell 脚本,Unix 用户可以通过它来执行 Gradle 任务。

(2)gradle-wrapper.jar

gradle-wrapper.jar是Gradle Wrapper的主体功能包(wrapper 的代码所在)。项目打包必须要有的,不然无法去执行gradlew。

(3)gradle-wrapper.properties

gradle-wrapper.properties文件主要指定了该项目需要什么版本的Gradle,从哪里下载该版本的Gradle,下载下来放到哪里。从图示项目中可以知道我要使用gradle-3.5版本。

 
 

我们使用gradlew命令的使用,会根据这个文件来使用对应的gradle进行构建。当本地GRADLE_USER_HOME(当前用户目录,一般指~/.gradle)中的~/.gradle/wrapper/dists没有安装gradle时,将会自动从此地址distributionUrl中下载gradle,之后的执行将不会再次下载安装。

【文件如何配合使用】

当从版本库下载代码之后,如果你本机安装过gradle,当然直接直接编译运行既可。但是对没有安装gradle的用户,可以执行项目根目录下的gradlew.bat脚本(Linux是执行gradlew命令),

将会在gradle-wrapper.properties中的~/.gradle/wrapper/dists目录中首次下载并安装gradle并可以编译代码,一个指令可以下载并安装gradle来构建项目,由此可见非常方便。大概流程如下:

  1. 解析gradle-wrapper.properties文件,获取项目需要的 gradle 版本下载地址。
  2. 判断本地用户目录下的~/.gradle目录下是否存在该版本,不存在该版本,走第3点,存在走第4点。
  3. 下载gradle-wrapper.properties指定版本,并解压到用户目录的下 ~/.gradle文件下。
  4. 利用 ~/.gradle目录下对应的版本的 gradle 进行相应自动编译操作。

将Wrapper添加到Gradle项目

在命令行中运行 wrappertask 即可配置Wrapper,如下:

$gradle wrapper --gradle-version 2.8
:wrapper
BUILD SUCCESSFUL
Total time: 3.546 secs

运行完毕后,可以看到在项目的更目录中多了上面提到的一些文件和目录:

 
 

除了直接在命令行执行外,也可以在build.gradle文件中添加一个Wrapper task:

task wrapper(type: Wrapper){  // type: Wrapper中的Wrapper开头W必须大写
gradleVersion='2.8'
distributionBase='GRADLE_USER_HOME'
distributionPath='wrapper/dists'
zipStoreBase='GRADLE_USER_HOME'
zipStorePath='wrapper/dists'
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
}

//每一项都可单独设置,gradle-2.8-all.zip表示下载该版本Gradle的源码

然后执行这个task:

gradle -q wrapper

最新文章

  1. SharePoint2016母版页的直接依赖项的数目限制超过10的限制解决方案Direct Dependencies Limit with Master page User Controls
  2. svn中第一次check out working copy项目下来出现 ld: library not found for -lcrypto clang: error: linker command failed with exit code 1 (use -v to see invocation)
  3. Swift面向对象基础(上)——Swift中的类和结构体(上)
  4. Centos7安装配置gitlab
  5. PAT乙级 1031. 查验身份证(15) 标志要清零!!!!!!!!!
  6. TCP连接的建立与关闭
  7. Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/lock
  8. 那些年,我们一起学WCF--(8)Single实例行为
  9. jquery获取浏览器的高度和宽度
  10. [置顶] android网络通讯之HttpClient4不指定参数名发送Post
  11. 设计模式 - 观察者模式(Observer Pattern) 详细解释
  12. php目录函数
  13. web兼容性测试相关知识
  14. 拦截器(Interceptor)中的invocation.invoke()
  15. Jmeter Thread Group中如果存在HTTP request执行失败,就对整个Thread Group重新执行,限定最大执行次数N次
  16. TCP/IP详解 卷1 第十七章 TCP:传输控制协议
  17. Win7 VS2015及MinGW环境编译矢量库agg-2.5和cairo-1.14.6
  18. virtualbox centos 网络配置
  19. jmeter 使用ANT运行 设置自动停止时间
  20. Android之Fragment优点

热门文章

  1. PHP curl_setopt函数
  2. PHP atanh() 函数
  3. cobbler多机定制安装
  4. 使用Flask开发简单接口(3)--引入MySQL
  5. 微信号可以改了?我用 Python 发现了隐藏的 6 大秘密.
  6. 我搭的神经网络不work该怎么办!看看这11条新手最容易犯的错误
  7. Elasticsearch第一篇:在 Windows 上的环境搭建
  8. 【Linux】添加Nginx代理配置只允许内部IP访问
  9. java Iterator迭代器
  10. 2018-04-19:innodb和myisam区别