Chapter 5. The Gradle Wrapper 关于gradle wrapper

Most tools require installation on your computer before you can use them. If the installation is easy, you may think that’s fine. But it can be an unnecessary burden on the users of the build. Equally importantly, will the user install the right version of the tool for the build? What if they’re building an old version of the software?

//大多数工具需要在使用前安装,如果安装容易还好,但是如果因为安装的麻烦而惹恼用户就不太好了。而同样重要的是用户是否安装的正确的版本,假如用户正在使用旧版本软件构建呢?

The Gradle Wrapper (henceforth referred to as the “Wrapper”) solves both these problems and is the preferred way of starting a Gradle build.

//Gradle Wrapper ,以后简称为Wrapper,解决了这两个问题,这也是gradle 构建的优选方法

5.1. Executing a build with the Wrapper

//使用wrapper执行构建

If a Gradle project has set up the Wrapper (and we recommend all projects do so), you can execute the build using one of the following commands from the root of the project:

//如果gradle项目已经安装了wrapper(我们建议所有的项目都这么做),你可以在项目的根目录使用下面命令中的任何一个执行构建

  • ./gradlew <task> (on Unix-like platforms such as Linux and Mac OS X) //mac系统上
  • gradlew <task> (on Windows using the gradlew.bat batch file) //windows系统上

Each Wrapper is tied to a specific version of Gradle, so when you first run one of the commands above for a given Gradle version, it will download the corresponding Gradle distribution and use it to execute the build.

//每一个wrapper绑定到一个指定的gradle版本上,所以当你第一次对于给定的gradle版本运行上面命令中的一个时,它将会下载对应gradle发布包,并使用它执行构建

IDEs

When importing a Gradle project via its wrapper, your IDE may ask to use the Gradle ‘all‘ distribution. This is perfectly fine and helps the IDE provide code completion for the build files.

Not only does this mean that you don’t have to manually install Gradle yourself, but you are also sure to use the version of Gradle that the build is designed for. This makes your historical builds more reliable. Just use the appropriate syntax from above whenever you see a command line starting with gradle ... in the user guide, on Stack Overflow, in articles or wherever.

For completeness sake, and to ensure you don’t delete any important files, here are the files and directories in a Gradle project that make up the Wrapper:

//这是一些生成在gradle项目中的重要文件,这些文件用来组建wrapper,不要删除

  • gradlew (Unix Shell script)
  • gradlew.bat (Windows batch file)
  • gradle/wrapper/gradle-wrapper.jar (Wrapper JAR)
  • gradle/wrapper/gradle-wrapper.properties (Wrapper properties)

If you’re wondering where the Gradle distributions are stored, you’ll find them in your user home directory under $USER_HOME/.gradle/wrapper/dists.

//gradle distribution包存储在$USER_HOME/.gradle/wrapper/dists

5.2. Adding the Wrapper to a project

//给项目添加wrapper

The Wrapper is something you should check into version control. By distributing the Wrapper with your project, anyone can work with it without needing to install

//wrapper是在添加到版本库中要检查的内容,把wrapper发布到项目中,任何人可以使用wrapper而不需要安装gradle

Gradle beforehand. Even better, users of the build are guaranteed to use the version of Gradle that the build was designed to work with. Of course, this is also great forcontinuous integration servers (i.e. servers that regularly build your project) as it requires no configuration on the server.

//更好的是,构建的用户可以保证使用到的就是gradle构建被设计的目标版本,当然对于持续集成服务器来说这也很棒。

You install the Wrapper into your project by running the wrapper task. (This task is always available, even if you don‘t add it to your build). To specify a Gradle version

//通过运行wrapper task来安装wrapper,这个任务总是可获得的,尽管你没有把它添加到构建步骤中。

use--gradle-version on the command-line. You can also set the URL to download Gradle from directly via --gradle-distribution-url. If no version or distribution

//用--gradle--version来指定gradle版本,你也可以通过--gradle-distribution-url选项设置直接下载gradle的url

URL is specified, the Wrapper will be configured to use the gradle version the wrapper task is executed with. So if you run the wrapper task with Gradle 2.4, then the

//如果没有指定wrapper的版本或者url,wrapper会下载执行wrapper任务的gradle的版本,所以,如果你使用gradle 2.4运行wrapper任务,wrapper的默认配置就是2.4

Wrapper configuration will default to version 2.4.

Example 5.1. Running the Wrapper task

Output of gradle wrapper --gradle-version 2.0

> gradle wrapper --gradle-version 2.0
:wrapper

BUILD SUCCESSFUL

Total time: 1 secs

The Wrapper can be further customized by adding and configuring a Wrapper task in your build script, and then executing it.

//wrapper可以在build脚本中添加wrapper 任务来深度定制化,然后执行它。

Example 5.2. Wrapper task

build.gradle

task wrapper(type: Wrapper) {
    gradleVersion = ‘2.0‘
}

After such an execution you find the following new or updated files in your project directory (in case the default configuration of the Wrapper task is used).

//在执行完上面的脚本,你会发现在项目中生成了下面这些新的或者修改的文件(以防使用默认配置)

Example 5.3. Wrapper generated files

Build layout

simple/
  gradlew
  gradlew.bat
  gradle/wrapper/
    gradle-wrapper.jar
    gradle-wrapper.properties

All of these files should be submitted to your version control system. This only needs to be done once. After these files have been added to the project, the project

//所有的这些文件将会提交到版本库中。所以这个任务只需要执行一次。当这些文件添加到项目中后,

should then be built with the added gradlew command. The gradlew command can be used exactly the same way as the gradle command.

//项目之后会使用gradlew命令来构建,gradlew命令用法可gradle一样

If you want to switch to a new version of Gradle you don‘t need to rerun the wrapper task. It is good enough to change the respective entry in thegradle-wrapper.properties file, but if you want to take advantage of new functionality in the Gradle wrapper, then you would need to regenerate the wrapper files.

//如果你想切换到gradle的新版本,只需要修改gradle-wrapper.properties 文件

5.3. Configuration

If you run Gradle with gradlew, the Wrapper checks if a Gradle distribution for the Wrapper is available. If so, it delegates to the gradle command of this distribution with all the arguments passed originally to the gradlew command. If it didn‘t find a Gradle distribution, it will download it first.

When you configure the Wrapper task, you can specify the Gradle version you wish to use. The gradlew command will download the appropriate distribution from the Gradle repository. Alternatively, you can specify the download URL of the Gradle distribution. The gradlew command will use this URL to download the distribution. If you specified neither a Gradle version nor download URL, the gradlew command will download whichever version of Gradle was used to generate the Wrapper files.

For the details on how to configure the Wrapper, see the Wrapper class in the API documentation.

If you don‘t want any download to happen when your project is built via gradlew, simply add the Gradle distribution zip to your version control at the location specified by your Wrapper configuration. A relative URL is supported - you can specify a distribution file relative to the location of gradle-wrapper.properties file.

If you build via the Wrapper, any existing Gradle distribution installed on the machine is ignored.

5.4. Verification of downloaded Gradle distributions

The Gradle Wrapper allows for verification of the downloaded Gradle distribution via SHA-256 hash sum comparison. This increases security against targeted attacks by preventing a man-in-the-middle attacker from tampering with the downloaded Gradle distribution.

To enable this feature you‘ll want to first calculate the SHA-256 hash of a known Gradle distribution. You can generate a SHA-256 hash from Linux and OSX or Windows (via Cygwin) with the shasum command.

Example 5.4. Generating a SHA-256 hash

> shasum -a 256 gradle-2.4-all.zip
371cb9fbebbe9880d147f59bab36d61eee122854ef8c9ee1ecf12b82368bcf10  gradle-2.4-all.zip

Add the returned hash sum to the gradle-wrapper.properties using the distributionSha256Sum property.

Example 5.5. Configuring SHA-256 checksum verification

gradle-wrapper.properties

distributionSha256Sum=371cb9fbebbe9880d147f59bab36d61eee122854ef8c9ee1ecf12b82368bcf10

5.5. Unix file permissions

The Wrapper task adds appropriate file permissions to allow the execution of the gradlew *NIX command. Subversion preserves this file permission. We are not sure how other version control systems deal with this. What should always work is to execute “sh gradlew”.

时间: 2024-10-10 07:56:33

Chapter 5. The Gradle Wrapper 关于gradle wrapper的相关文章

多个 gradle 文件夹 \.gradle\wrapper\dists\ 设置gradle不是每次都下载

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 设置gradle不是每次都下载 \.gradle\wrapper\dists\ ======= 在你导入项目的时候,有个选项的: 你要是选了Use default gradle mapper就会下载一次,Use local gradle distribution就会用你制定的gradle了 ====== 设置gradle不是每次都下载 \.gradle\wrapper\dists\

eclipse gradle插件 org.gradle.tooling.GradleConnectionException: Could not install Gradle distribution from &#39;https://services.gradle.org/distributions/gradle-3.4-bin.zip&#39;.

eclipse安装gradle后出现如下异常: org.gradle.tooling.GradleConnectionException: Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-3.4-bin.zip'.    at org.gradle.tooling.internal.consumer.DistributionFactory$ZippedDist

Gradle笔记——关于Gradle 1.12

如果你能进来看这篇文章,相信你对Gradle也有一个简单了解.这里也不再叙述它相对于其他构建工具的优势,而是介绍一下Gradle 1.12这个版本. 到目前为止,Gradle已经出到2.1版本了,为什么还从1.12这个版本开始介绍?主要的原因是我使用Gradle是Android开发所需要.公司里面是采用Android Studio来进行Android项目的开发的,而公司里普遍用的还是Android Studio的0.8.4及其之前的版本,暂时还不能更新到2.0或更新的版本.另外,Gradle1.

Gradle插件和Gradle对应表

Gradle插件build.gradle文件的buildscript Gradlegradle/wrapper/gradle-wrapper.properties文件 classpath 'com.android.tools.build:gradle:2.3.3' 或  classpath 'com.android.tools.build:gradle:2.3.2' 或  classpath 'com.android.tools.build:gradle:2.3.1' distributionU

Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle

随着信息化的快速发展,IT项目变得越来越复杂,通常都是由多个子系统共同协作完成.对于这种多系统.多项目的情况,很多构建工具都已经提供了不错的支持,像maven.ant.Gradle除了借鉴了ant或者maven的继承的方式定义子项目,也提供了一种更为方便的集中配置的方式,大大减少了构建带来的复杂度.除此之外,Gradle还提供了清晰的Project树模型来映射多项目的组织结构.下面,让我们了解一下如何使用Gradle构建多项目. 1.多项目的定义和结构 Mulit project 设置是grad

Gradle 同步 已经开始 Gradle sync started

Gradle 同步 已经开始 Gradle sync started 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 安卓Gradle插件更新 介绍 介绍 recommended 为了利用所有最新的特性(例如即时运行), 改进和安全补丁, 我们强烈建议你将Android升级版的插件升级到2.3.3版本,升级到3.3版. To take advantage of all the lates

Intellij无法同步Gradle, 出现org.gradle.plugins.ide.internal.IdeDependenciesExtractor错误

当Intellj提示无法同步Gradle org.gradle.plugins.ide.internal.IdeDependenciesExtractor.extractRepoFileDependencies(Lorg/gradle/api/artifacts/ConfigurationContainer;Ljava/util/Collection;Ljava/util/Collection;ZZ)Ljava/util/List; 这是因为Intellij对gradle版本不支持导致 可以考虑

【转】从零开始学习Gradle之一---初识Gradle

原文:http://www.blogjava.net/wldandan/archive/2012/06/27/381605.html 前提: 安装Gradle.安装过程非常简单: (1)下载Gradle(2)将GRADLE_HOME/bin/gradle加入$PATH. 1. 基本概念(Project 和 Task) Gradle中有两个基本的概念:project和task.每个Gradle的构建由一个project构成,它代表着需要被构建的组件或者构建的整个项目.每个project由一个或者多

Gradle之Android Gradle Plugin 主要 Task 分析(三)

[Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要 Task 分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plugin 使用及开发 了解 android gradle plugin 的使用 看完本文可以达到什么程度 了解 android gradle plugin 中各个 task 作用 了解 android gradle plugin 中主要 task 的实现 阅读前准备工作 1.项目添加 android