Normally, if we want to run a Gradle build, we must have Gradle installed on our computer. Also, if we distribute our project to others and they want to build the project, they must have Gradle installed on their computers. The Gradle Wrapper can be used to allow others to build our project even if they don't have Gradle installed on their computers.
The wrapper is a batch script on the Microsoft Windows operating systems or shell script on other operating systems that will download Gradle and run the build using the downloaded Gradle.
By using the wrapper, we can make sure that the correct Gradle version for the project is used. We can define the Gradle version, and if we run the build via the wrapper script file, the version of Gradle that we defined is used.
To create the Gradle Wrapper batch and shell scripts, we can invoke the built-in wrapper
task. This task is already available if we have installed Gradle on our computer. Let's invoke the wrapper
task from the command-line:
$ gradle wrapper :wrapper BUILD SUCCESSFUL Total time: 0.61 secs
After the execution of the task, we have two script files—gradlew.bat
and gradlew
—in the root of our project directory. These scripts contain all the logic needed to run Gradle. If Gradle is not downloaded yet, the Gradle distribution will be downloaded and installed locally.
In the gradle/wrapper
directory, relative to our project directory, we find the gradle-wrapper.jar
and gradle-wrapper.properties
files. The gradle-wrapper.jar
file contains a couple of class files necessary to download and invoke Gradle. The gradle-wrapper.properties
file contains settings, such as the URL, to download Gradle. The gradle-wrapper.properties
file also contains the Gradle version number. If a new Gradle version is released, we only have to change the version in the gradle-wrapper.properties
file and the Gradle Wrapper will download the new version so that we can use it to build our project.
All the generated files are now part of our project. If we use a version control system, then we must add these files to the version control. Other people that check out our project can use the gradlew
scripts to execute tasks from the project. The specified Gradle version is downloaded and used to run the build file.
If we want to use another Gradle version, we can invoke the wrapper
task with the --gradle-version
option. We must specify the Gradle version that the Wrapper files are generated for. By default, the Gradle version that is used to invoke the wrapper
task is the Gradle version used by the wrapper files.
To specify a different download location for the Gradle installation file, we must use the --gradle-distribution-url
option of the wrapper
task. For example, we could have a customized Gradle installation on our local intranet, and with this option, we can generate the Wrapper files that will use the Gradle distribution on our intranet.
In the following example, we generate the wrapper files for Gradle 2.12 explicitly:
$ gradle wrapper --gradle-version=2.12 :wrapper BUILD SUCCESSFUL Total time: 0.61 secs
If we want to customize properties of the built-in wrapper
task, we must add a new task to our Gradle build file with the org.gradle.api.tasks.wrapper.Wrapper
type. We will not change the default wrapper
task, but create a new task with new settings that we want to apply. We need to use our new task to generate the Gradle Wrapper shell scripts and support files.
We can change the names of the script files that are generated with the scriptFile
property of the Wrapper task. To change the name and location of the generated JAR and properties files, we can change the jarFile
property:
task createWrapper(type: Wrapper) { // Set Gradle version for wrapper files. gradleVersion = '2.12' // Rename shell scripts name to // startGradle instead of default gradlew. scriptFile = 'startGradle' // Change location and name of JAR file // with wrapper bootstrap code and // accompanying properties files. jarFile = "${projectDir}/gradle-bin/gradle-bootstrap.jar" }
If we run the createWrapper
task, we get a Windows batch file and shell script and the Wrapper bootstrap JAR file with the properties file is stored in the gradle-bin
directory:
$ gradle createWrapper :createWrapper BUILD SUCCESSFUL Total time: 0.605 secs $ tree . . ├── gradle-bin │ ├── gradle-bootstrap.jar │ └── gradle-bootstrap.properties ├── startGradle ├── startGradle.bat └── build.gradle 2 directories, 5 files
To change the URL from where the Gradle version must be downloaded, we can alter the distributionUrl
property. For example, we could publish a fixed Gradle version on our company intranet and use the distributionUrl
property to reference a download URL on our intranet. This way we can make sure that all developers in the company use the same Gradle version:
task createWrapper(type: Wrapper) { // Set URL with custom Gradle distribution. distributionUrl = 'http://intranet/gradle/dist/gradle-custom- 2.12.zip' }
3.17.164.34