Consider this scenario, for each of your Gradle projects you have a dependency on a local in-house jar files. Additionally, you want to set some common environment variables for each of your Gradle projects (such as GRADLE_OPTS
).
A simple solution is to add the jar file in the dependency closure. An alternate solution could be to create one common build file and include this common file in each of the build files.
The simplest solution Gradle provides for these kinds of problems by introducing the initialization script.
Initialization scripts are no special files, but a Gradle script with the .gradle
extension. However, this will execute every time before any of your build files execute.
Some of the uses of the initialization script are as follows:
So, how does Gradle find these initialization script(s)? There are multiple ways to define the initialization script which are as follows:
.gradle
extension under <USER_HOME>/.gradle/init.d
directory are treated as initialization scripts. Gradle will execute all the .gradle
files under this directory before the execution of any Gradle build script.init.gradle
under <USER_HOME>/.gradle/
are treated as an initialization script..gradle
extension under <GRADLE_HOME>/init.d/
directory.-I <file name>
or --init-script <file name>
.Following is a sample init
script.
println "Hello from init script" projectsLoaded { rootProject.allprojects { buildscript { repositories { maven { url "http://central.maven.org/maven2/" } } dependencies { classpath group: 'javax.mail', name: 'javax.mail-api', version: '1.4.5' } } } }
Copy and paste the preceding code and save it as init.gradle
file under any of the preceding mentioned paths. The println
statement is intentionally added in this file to help you understand the execution cycle of the init
script. Whenever you execute any Gradle script from a directory, you will see Hello from init script
. Apart from printing Hello from init script
, this script also downloads javax.mail-api-1.4.5.jar
in the Gradle cache when the script is executed for the first time. It will not download this library again, unless there is a change in the file in the repository. If you don't understand what a cache is, don't worry. You will learn more about cache management in the later section of this chapter. Remember, sometimes defining too many configurations in the init script could be problematic. Specifically, debugging could be difficult because the projects are no longer self-contained.
18.217.206.112