Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

austinarbor/version-catalog-generator

Open more actions menu

Repository files navigation

Version Catalog Generator Plugin

ci codecov Gradle Plugin Portal

Easily use any BOM as a Gradle Version Catalog.

Compatibility

Plugin Version

Gradle Version

1.x

7.6.x

1.x, 2.x, 3.x

8.x

3.x

9.x

4.x

9.x

Quick Start

First, add your BOM dependencies to your version catalog

libs.versions.toml
[versions]
spring = "3.2.0"
aws = "2.22.0"

[libraries]
awsBom = { group = "software.amazon.awssdk", name = "bom", version.ref = "aws" }
springBootDependencies = { group = "org.springframework.boot", name = "spring-boot-dependencies", version.ref = "spring" }

Then, add the plugin to your settings with the catalogs you want to generate

settings.gradle.kts
import dev.aga.gradle.versioncatalogs.Generator.generate

plugins {
  id("dev.aga.gradle.version-catalog-generator") version("4.0.0")
}

dependencyResolutionManagement {
  repositories {
    mavenCentral() // (1)
  }
  versionCatalogs {
    create("libs") { // (2)
      from(files("gradle/libs.versions.toml"))
    }
    generate("libs") { // (3)
      fromToml("springBootDependencies") { // (4)
        propertyOverrides = mapOf(
          "jackson-bom.version" to "2.16.1", // (5)
          "mockito.version" to versionRef("mockito"), // (6)
        )
        generateBomEntry = true // (7)
      }
    }
    generate("awsLibs") {
      fromToml("awsBom") {
        aliasPrefixGenerator = GeneratorConfig.NO_PREFIX // (8)
      }
    }
    generate("manyLibs") {
      using { // (9)
        aliasPrefixGenerator = GeneratorConfig.NO_PREFIX
      }
      fromToml("aws-bom", "jackson-bom") { // (10)
        aliasSuffixGenerator = { prefix, groupId, artifactId -> // (11)
          val trimmed = artifactId.replaceFirst("junit-", "").replaceFirst("jackson-", "")
          GeneratorConfig.DEFAULT_ALIAS_SUFFIX_GENERATOR(prefix, groupId, trimmed)
        }
      }
      from("org.springframework.boot:spring-boot-dependencies:3.4.1") { // (12)
        aliasPrefixGenerator = GeneratorConfig.DEFAULT_ALIAS_PREFIX_GENERATOR // (13)
      }
    }
  }
}
  1. Must include repositories here for dependency resolution to work from settings

  2. If you want to append to an existing catalog, you must declare it before using it in a generate block (even if it’s the default libs.versions.toml)

  3. The name of the generated catalog. If a catalog with that name already exists, the entries will be appended to it. Otherwise, a new catalog will be created.

  4. The name of the bom library in the version catalog

  5. Optionally override some version properties using a literal value

  6. Or, you can reference version aliases in the source TOML

  7. Optionally generate an entry in the catalog for the BOM itself

  8. All dependencies in the AWS BOM are for AWS so we can skip the prefix

  9. Set the default generation options that will apply to all sources unless overridden

  10. Include all dependencies from both aws-bom and jackson-bom

  11. Override the default aliasSuffixGenerator for dependencies in these two BOMs

  12. Also include all dependencies from the spring-boot-dependencies BOM in the generated catalog

  13. Override the default aliasPrefixGenerator for dependencies in the spring BOM

Lastly, use the dependencies in your build

build.gradle.kts
dependencies {
  implementation(awsLibs.s3)
  implementation(awsLibs.dynamodb)
  implementation(libs.spring.springBootStarterWeb)
  implementation(libs.jackson.jacksonDatabind)
  implementation(manyLibs.sts)
  implementation(manyLibs.databind)
  implementation(manyLibs.spring.springBootStarterJdbc)
}

Migrate to 4.x

Detailed Usage

Goals

  • ✓ Compatible with Dependabot

  • ✓ Nested BOM support (i.e. spring-boot-dependences imports mockito-bom, etc)

  • ✓ Easy to override versions (similar to ext["version.property"] = …​ in Spring Boot Dependencies plugin)

Morty Proxy This is a proxified and sanitized view of the page, visit original site.