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 mobile image

App store rankings love fast apps - mobile vitals can help you get there

Slow startup times, UI hangs, and frozen frames frustrate users—but they’re also fixable. Mobile Vitals help you measure and understand these performance issues so you can optimize your app’s speed and responsiveness. Learn how to use them to reduce friction and improve user experience.

Read full post →

Top comments (0)

Sentry mobile image

Improving mobile performance, from slow screens to app start time

Based on our experience working with thousands of mobile developer teams, we developed a mobile monitoring maturity curve.

Read more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay