Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle 7.0 Version Catalog for maven bom

I have published maven bom and imported it in top level build.gradle.kts as:

allProjects {
  dependencies {
        implementation(platform("com.example:some-dependencies:1.2.3"))
    }
}

And then in libs.versions.toml:

[libraries]
some-bom = { group = "com.example", name="some-dependencies", version="1.2.3" }

When I change first code sample to:

allProjects {
  dependencies {
        implementation(platform(libs.some.bom))
    }
}

I get:

Could not resolve: javax.xml.bind:jaxb-api
Could not resolve: org.springframework.boot:spring-boot-starter-test
...

Is there any way to use Gradle 7 version catalogs with boms?

like image 284
Hiosdra Avatar asked Sep 08 '25 00:09

Hiosdra


2 Answers

In my case, it just worked. I'm working on Android project and my script is just like below:

//libs.versions.toml
[libraries]
deps_okhttp_bom = "com.squareup.okhttp3:okhttp-bom:4.9.1"
deps_okhttp_lib = { module  ="com.squareup.okhttp3:okhttp" }
deps_okhttp_logging_interceptor = { module= "com.squareup.okhttp3:logging-interceptor"}

//build.xml
dependencies {
  implementation platform(libs.deps.okhttp.bom)
  implementation libs.deps.okhttp.lib
  implementation libs.deps.okhttp.logging.interceptor
}

In your example, you just added dependency for BOM. But as BOM is just an spec sheet which describes versions for each libraries, you need to add dependencies for specific libraries.

like image 71
kingori Avatar answered Sep 11 '25 01:09

kingori


Another example usage with bundles:

TOML file:

[versions]

# AndroidX - Compose
androidxComposeBom = "2024.02.01"

[libraries]

# AndroidX - Compose
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" }
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-compose-ui-util = { group = "androidx.compose.ui", name = "ui-util" }
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-compose-material = { group = "androidx.compose.material", name = "material" }

[bundles]

# AndroidX - Compose
androidx-compose-bom = ["androidx-compose-ui", "androidx-compose-ui-util", "androidx-compose-ui-tooling-preview", "androidx-compose-material"]

build.gradle.kts file:

dependencies {
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.bundles.androidx.compose.bom)
}
like image 43
Tomas Avatar answered Sep 11 '25 02:09

Tomas