DEV Community

Cover image for How to manage dependencies between Gradle modules?
Aldo Wachyudi
Aldo Wachyudi

Posted on • Edited on

5 3

How to manage dependencies between Gradle modules?

In a multimodule project, managing dependencies manually can be challenging. For example, if you forget to update a library version after modifying a library version on another module, your project will have a duplicate library.

Starting from Gradle 7.4.1, version catalog is the recommended way of managing dependencies between Gradle projects (also known as a module).

To use the version catalog, simply add libs.versions.toml file inside gradle folder (yourproject/gradle/libs.versions.toml)

.
├── app
│   ├── build.gradle.kts
│   ├── proguard-rules.pro
│   └── src
├── gradle
│   ├── libs.versions.toml
│   └── wrapper
│      ├── gradle-wrapper.jar
│      └── gradle-wrapper.properties
├── build.gradle.kts
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle.kts
Enter fullscreen mode Exit fullscreen mode

Inside the libs.versions.toml file, you can add the dependencies of your projects.

[versions]
compose = "1.2.1"

[libraries]
compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" }
compose-material = { module = "androidx.compose.material:material", version.ref = "compose" }
compose-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" }
compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }

[bundles]
compose = ["compose-foundation", "compose-material", "compose-tooling", "compose-ui"]
Enter fullscreen mode Exit fullscreen mode

That's it! The dependencies are available across your Gradle projects.

Here is how you use the dependencies in your project's build.gradle.kts.

dependencies {
    implementation(libs.compose.foundation)
    implementation(libs.compose.material)
    implementation(libs.compose.tooling)
    implementation(libs.compose.ui)
}
Enter fullscreen mode Exit fullscreen mode

Note that Gradle converts the dash (-) separator to dot (.). From compose-foundation to compose.foundation.

Other benefits of using version catalogs are:

  • Centralized version for some libraries.

By using version.ref, we can assign the same compose version for each library. So, you just need to update a library version in one place.

  • Grouping dependencies.

Oftentimes, we have many dependencies that should be declared together. We can make the dependencies declaration shorter by using bundle, like this.

dependencies {
    implementation(libs.bundles.compose)
}
Enter fullscreen mode Exit fullscreen mode

Summary

By using the version catalog, we can manage dependencies easier. This can be useful for a multimodule project, which is common in a mid-sized or large-sized software project.

Heads over to the official Gradle documentation for more detail.

Note:

  • Gradle introduces version catalog since version 7.0, but it's still marked as an experimental feature.

  • Photo taken by redcharlie

Sentry blog image

The countdown to March 31 is on.

Make the switch from app center suck less with Sentry.

Read more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more