Gradle 包装器

白花蛇
• 阅读 2637

Why

试想一下,你做好了一个 Gradle 构建的 Web 应用,并且要分享给他人,让他人可以参与到开发中,但对方下载代码后安装了 Gradle 却发现应用未能正常使用。
经过多次长时候才发现原来是 Gradle 运行时版本不兼容。
怎样解决这个问题呢?

What

Gradle 包装器是 Gradle 的核心特性,能够让机器在没有安装 Gradle 运行时的情况下运行 Grade 构建。它也让构建脚本运行在一个指定的 Gradle 版本上。它是通过中心仓库下载对应版本的 Gradle 运行时来实现的。最终的目标是创造一个独立于系统、系统配置和 Gradle 版本的可靠的、可重复的构建。

How

配置包装器

1、创建一个包装器任务
在 build.gradle 中添加以下代码:

task wrapper(type:Wrapper){
    gradleVersion='3.4'
}

2、执行任务生成包装器文件

www.cdoerknock.com$ gradle wrapper
Starting a Gradle Daemon (subsequent builds will be faster)
> Configuring > 0/1 projects > root project > Compiling D:\Windows\Desktop\LearnGradle\Gradle包装器\project\build.gradle:wrapper

BUILD SUCCESSFUL

Total time: 14.749 secs

此时会生成 gradle 文件夹以及 gradlew、gradlew.bat 文件

|  //下面是 windows 或者 linux 执行 Gradle 命令的包装器脚本
│  gradlew
│  gradlew.bat
└──gradle
   └─wrapper
           //Gradle 包装器微类库,包含下载和解包 Gradle 运行时的逻辑
           gradle-wrapper.jar
           //包装器元信息,包含已下载 Gradle 运行时的存储位置和原始 URL
           gradle-wrapper.properties

获取到改代码,但是自己本机没有 Gradle 运行时的同事就可以执行对应操作系统的命令来执行,例如 Windows 系统使用 powershell【cmd也可以】:

//Linux 应该使用 .\gradlew appRun
PS D:\Windows\Desktop\LearnGradle\Gradle包装器\project>    .\gradlew.bat appRun
//从远程库下载对应版本的 Gradle 
Downloading https://services.gradle.org/distributions/gradle-3.4-bin.zip
//解压到默认目录 Linux 还会赋权限 
Unzipping C:\Users\zylia\.gradle\wrapper\dists\gradle-3.4-bin\aeufj4znodijbvwfbsq3044r0\gradle-3.4-bin.zip to C:\Users\zylia\.gradle\wrapper\dists\gradle-3.4-bin\aeufj4znodijbvwfbsq3044r0
:prepareInplaceWebAppFolder
:createInplaceWebAppFolder
:compileJava
:processResources NO-SOURCE
:classes
:prepareInplaceWebAppClasses
:prepareInplaceWebApp
:appRun
14:50:22 INFO  Jetty 9.2.15.v20160210 started and listening on port 9090
14:50:22 INFO  ToDo Application runs at:
14:50:22 INFO    http://localhost:9090/coderknock
Press any key to stop the server.
> Building 87% > :appRun

运行时的 Gradle 是通过 Gradle 项目的中心服务器下载并解压(该下载解压过程只会进行一次,之后会重用)到 C:Users用户名.gradlewrapperdists (Linux是$HOME_DIR/.gradle/warpper/dists)目录下并且赋予相应权限后来进行构建的。这样就可以解决 Why 里提到的问题了。

Further

如果我们无法访问外网,或者不想解压到默认目录,我们可以通过在 build.gradle 脚本中添加一些自定义配置来修改这些内容【修改后需要重新执行gradle wrapper生成包装器】:

task wrapper(type:Wrapper){
    gradleVersion='3.4'
    //获取 Gradle 安装包的 URL 这里可以通过下面的方式使用本地文件(从中央库下载比较慢,我们可以使用迅雷等工具下载后用这种方式比较快捷)
    distributionUrl='file:///D:/Windows/Desktop/LearnGradle/Gradle包装器/project/gradle-3.4-bin.zip'
    //C:\Users\用户名\.gradle linux下是 $HOME_DIR/.gradle 的相对路径
    distributionPath='gradle-dists'
}
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
spring源码调试准备工作
Spring源码下载1、gitclonebranchv5.1.3.RELEASEhttps://gitee.com/Z201/springframework.git2、gradle下载,gradle要JDK8的版本3、到下载的spring源码路径执行gradle命令,gradlew:spri
Easter79 Easter79
3年前
springCloud 搭建eureka服务之天坑
这里我是采用gradle来管理jar包的。1、使用idea创建一个gradle项目。2、编辑settings.gradle文件rootProject.name'jtm'//include'jtm_core'//include'jtm_sys'//include'jtm_eureka'
Wesley13 Wesley13
3年前
gradle配置本地mavn仓库 mavenLocal() 时的bug
最近在学习Gradle,在配置maven仓库时遇到一个很奇怪的问题。因为之前已经在自己机器上下载了一些maven的本地缓存,所有在使用gradle时想优先从本地的仓库中下载jar,查看了官方的userguide文档,发现其中有这么一段:大概意思是说使用mavenLocal()配置maven的本地仓库后,gradle默认会按以下顺序去查找本地的仓库
灯灯灯灯 灯灯灯灯
4年前
【IDEA】实战,阿里二面被问到构建及二次开发,直接裂开!!
JMeter5.4.1源码IDEA构建&二次开发(实战)1.下载源码2.导入IDEA2.1先设置Gradle目录未设置过Gradle的IDEA,建议先设置下Gradle的用户目录2.2导入JMeter工程2.3设置国内Gradle源设置gradle的下载源速度直接起飞!😂重新加载Gradle,或者重新加载项目接下来就是耐心的等等待,网速好的话,
Stella981 Stella981
3年前
Gradle的Android插件
Android构建系统由一个_Gradle_的Android插件组成。 Gradle(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.gradle.org%2F)是一个高级的构建工具集,它可以管理依赖,并使你能够定义定制化的构建逻辑。AndroidStudio使用了一个Gradl
Stella981 Stella981
3年前
Android Studio 3.0 下 Cordova 打包时 Gradle 兼容性问题解决
升级到AndroidStudio3.0,Gradle升级为4.3.1版本,使用cordovabuildandroid出错.解决方案:windows系统以下命令行在MINGW的bash窗口中执行1.下载文件https://downloads.gradle.org/distributions/gradle4.3.1
Wesley13 Wesley13
3年前
unity调用移动端相册并且裁剪图片
最近有个需求需要从手机上获取相册图片,并且需要传回到Unity中,经过几天的开发终于完成,以下为开发的记录:工具版本Unity5.6安卓AndroidStudio3.0 Unity导出Gradle项目使用gradle:2.3.3compileSdkVe
Stella981 Stella981
3年前
Gradle使用杂记
1、配置环境变量GRADLE\_HOME2、把gradle缓存目录指向了gradle安装目录下的.gradle目录,设置环境变量GRADLE\_USER\_HOMEGRADLE\_USER\_HOME%GRADLE\_HOME%\\.gradle或者指定目录GRADLE\_USER\_HOMED:\\gradle\\.grad
Wesley13 Wesley13
3年前
ubuntu20.04安装gradle
最近在研究CAS,新版本用gradle进行依赖描述和构建的,因此就顺应一下尝试用这个打包WAR!因为用虚拟机装的,打算日后转到容器去,所以使用了ubuntu做系统!系统已经安装了openjdk11jdk,因此接下来下载gradle包进行安装(gradle下载地址(https://www.oschina.net/action/GoToLink?ur
Stella981 Stella981
3年前
Gradle和Maven性能对比
Gradle目前已经出到6.0版本了,想当初我第一次了解到Gradle的时候,它仅有2.0版本,这些年来一直不断迭代和优化,现在可以说是非常成熟好用的一款工具。如果大家还在使用Maven,我建议大家学习一下Gradle,现在Gradle的性能可以说是完全超越了Maven,各种平台也早已支持Gradle。可以说,除非是兼容老项目,否则,完全可以用Gradle来
Stella981 Stella981
3年前
Gradle如何在任务失败后继续构建
如果我们运行Gradle构建并且其中一项任务失败,则整个构建将立即停止。因此,我们可以快速反馈构建状态。如果我们不想这样做,并且希望Gradle执行所有任务,即使某些任务可能失败了,我们也可以使用命令行选项continue。当我们使用continue命令行选项时,Gradle将执行从属任务没有失败的所有任务。这在多模块项目中也很有用,即使在某