How to run Gradle wrapper from any subdir with Gdub

Gradle

Gradle is a popular and flexible build system for JVM-based languages. We use Gradle as the build system for Mesos Elasticsearch. In this blog I discuss two Gradle concepts: the Gradle wrapper and Gdub, a tool that allows you to run the Gradle wrapper from any subdirectory.

gradlew – The Gradle wrapper

The Gradle wrapper, gradlew, is a shell script that downloads a specific Gradle distribution. This way a software project can configure a version of Gradle and everyone who runs gradlew will use the version specified in the project. This makes for a portable build. To try it out clone Mesos Elasticsearch and run


frank@franktop:~/src/mesos-elasticsearch$ ./gradlew clean build
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar
Downloading https://services.gradle.org/distributions/gradle-2.3-all.zip
...

Now gradlew will fetch gradle version 2.3 and install it under ~/.gradle/wrapper/dists and use that version from then on. Neat! The Gradle wrapper scripts and config can be generated by adding a wrapper task in your build.gradle file. For more information on how to do this see the Official Gradle wrapper documentation.

gdub – A Gradle / gradlew wrapper

If you have used gradlew for a while you probably recognize the following scenario. You want to run gradlew from a subdirectory. This subdirectory could be several levels deep so you have to invoke gradlew like this: ../../../gradlew. It may not sound like a problem but when you use your build system intensively it can become quite annoying. Luckily there is a simple solution…gdub! Gdub locates the gradle wrapper in an ancestor directory. Exactly what we want! Install gdub like this:


git clone https://github.com/dougborg/gdub.git
cd gdub
./install

and run gw plus any gradle tasks and off you go!


frank@franktop:~/src/mesos-elasticsearch/scheduler$ gw clean build
Using gradle at '/home/frank/src/mesos-elasticsearch/gradlew' to run buildfile '/home/frank/src/mesos-elasticsearch/scheduler/build.gradle':
...

For more information on Gdub checkout the Gdub Github page

The following two tabs change content below.

Frank Scholten

Senior Software Engineer at Container Solutions
Frank is a senior software engineer at Container Solutions. He focuses on Cloud Native applications with DC/OS and Apache Mesos, containers and Continuous Delivery. He created minimesos, the experimentation and testing tool for Apache Mesos. He is enthusiastic about Open Source software development, process improvement and automation in particular. Drawing on experience from a wide range of projects he is always on the lookout for new technologies, methods and ways to improve things and likes to write on speak on these topics.

Leave a Reply

Your email address will not be published. Required fields are marked *