Technically Feasible

Working with Gradle Modules

Likeness of Michael Oldroyd
Michael Oldroyd

Since my adventures with Java began, I have always used Maven as a build and dependency management tool. I had an awareness and even used gradle as a consumer, but never used it for anything but simple use-cases. Whilst building an example application the need arose to migrate a simple gradle app to a multi-module build.

Why use Gradle Modules?

Moving to a modular design helps to keep your code cleaner. Whilst it can seem simpler to maintain a monolithic project, over time changing requirements and developers often lead to a tangle developing within a project. Modules can help maintain clear boundaries within a project, and to aid better understand the intentions of the design. Not only that, your dependencies become explicit rather than implicit.

Bootstraping Gradle Modules

Declare dependency on sibling project

// project/example-app/settings.gradle
rootProject.name = 'example-app'
import(':example-library')

When declaring the dependency on the library, we need to ensure that the library is compiled before attempting to compile our application. We declare this requirement using evaluationDependsOn.

// project/example-app/build.gradle
evaluationDependsOn(":example-library")

dependencies {
compile project(path: ':example-library')
}
Image of me

Michael Oldroyd

Michael is a Software Engineer working in the North West of England. Michael spends his days building hand-crafted PHP applications. Rumours of his super-hero status are currently unconfirmed. He savours his victories when solving difficult programming challenges; occasionally writing about them here, on his personal blog.