Skip to content

Conversation

@jdaugherty
Copy link
Contributor

@jdaugherty jdaugherty commented Jan 16, 2026

This ended up being a breaking change. The artifact id was driving the version name instead of the calculate property name. I can change all of the property names to match to minimize this change, or we can go with the property name fix.

This is the current grails-bom:
https://central.sonatype.com/artifact/org.apache.grails/grails-bom

This is with my changes:
update-grails-bom.xml

Take a look at dependencies.gradle and you'll notice that the key of the maps are now correctly the property name instead of artifact id.

Other changes after the initial feedback:

  • ascidoctor & liquibase hibernate ext had the wrong keyvalues
  • I checked the generated Versions adoc and I believe it now matches the pom values
  • I've added a forced 'grails-profile' to the profile property names

@jamesfredley
Copy link
Contributor

I am seeing these changes between the two files:

1. Property name standardization (hyphen vs dot)

  • The 7.0.5 POM contained some duplicated properties — one version with a hyphen (e.g., byte-buddy.version) and an identical one with a dot (e.g., byte.buddy.version), both set to the same value.
  • In 7.0.6-SNAPSHOT:
    • All dotted variants have been removed.
    • Only the hyphenated form is kept (e.g., byte-buddy.version, asset-pipeline-gradle.version, directory-watcher.version, etc.).
    • This applies to dozens of properties (ant, asciidoctor, asset-pipeline, byte-buddy, commons-text, directory-watcher, grails-publish, javaparser, spring-boot sub-properties, etc.).

2. Specific property value or reference changes

  • rxjava.version:
    – 7.0.5: 3.1.11 (a mistake, as it duplicated the RxJava 3 value)
    – 7.0.6-SNAPSHOT: corrected to 1.3.8 (the proper RxJava 1 version)

  • io.reactivex.rxjava2:rxjava:
    – 7.0.5: 3.1.11 (a mistake, as it duplicated the RxJava 3 value)
    – 7.0.6-SNAPSHOT: corrected to 2.2.21 (the proper RxJava 2 version)

  • Asciidoctor Gradle JVM plugin:
    – 7.0.5: used a separate property ${asciidoctor.gradle.jvm.version} with value 4.0.5
    – 7.0.6-SNAPSHOT: now uses ${asciidoctorj.version} (value 3.0.0), aligning it with the AsciidoctorJ library version

  • Several dependencies that previously used dotted/separate properties now reference the standardized hyphenated ones (e.g., ant-junit now uses ${ant.version} instead of a separate ${ant.junit.version}, Spring Boot CLI and Gradle plugin now use ${spring-boot.version}, etc.).

3. Hard-coded snapshot versions for certain Grails artifacts

  • A handful of Grails-owned artifacts that are part of the build itself (not typical runtime dependencies) now have their version hard-coded to 7.0.6-SNAPSHOT instead of using a property:
    • grails-gsp-spring-boot
    • grails-gradle-plugins, grails-gradle-model, grails-gradle-common, grails-gradle-tasks
  • liquibase-hibernate5 is hard-coded to 4.27.0 instead of using ${liquibase-hibernate5.version}.

@jdaugherty jdaugherty marked this pull request as draft January 16, 2026 22:17
@jdaugherty
Copy link
Contributor Author

Converted back to draft, the following issues exist:

  • Non published projects in projectArtifactIds like grails-gsp-spring-boot
  • asciidoctor-gradle-jvm using the wrong property
  • published artifacts from included builds aren't being detected
  • liquibase-hibernate5-ext is wrong - shouldn't be hard coded

@jamesfredley jamesfredley moved this to In Progress in Apache Grails Jan 16, 2026
@jamesfredley jamesfredley added this to the grails:7.0.6 milestone Jan 16, 2026
@jamesfredley jamesfredley linked an issue Jan 16, 2026 that may be closed by this pull request
* correct incorrect keys that had partial matches
* map profile properties to have a prefix of 'grails-profile'
* remove duplicate entries
* fix versions adoc to match pom values
@jdaugherty
Copy link
Contributor Author

@jamesfredley I believe these issues are fixed now. After diffing the resulting pom files, they look better to me. Here's the adoc:

updated-grails-bom-constraints.txt

@jdaugherty jdaugherty marked this pull request as ready for review January 17, 2026 04:08
@jdaugherty
Copy link
Contributor Author

@matrei I spoke to @jamesfredley about this change, I think it's worth fixing the bom in a 7.0.6, but it would mean a breaking change - the property names would go back to the key values in dependencies.gradle.

@jdaugherty
Copy link
Contributor Author

Eventually, I need to remove the fallback code that allows partial property matching. We should error instead if the key isn't found. I'm leaving that for when I rewrite this for Gradle 9.

@jamesfredley
Copy link
Contributor

My outstanding concern is documentation. Here is a stab at all of the changes.

In general this fixes the two version for rxjava which were incorrect and applies logically consistent changes to the grails-bom (IE. what we would want/expect).

This will only break an application using one of the version properties, which has been removed, in Spring Dependency Management Plugin.

1. Property Name Standardization and Removal of Duplicates

  • In the 7.0.5 POM, there are numerous duplicated properties for third-party dependencies, with one variant using hyphens (e.g., byte-buddy.version) and an identical one using dots (e.g., byte.buddy.version), both set to the same value. This applies to properties like:

    • asset-pipeline-gradle.version / asset.pipeline.gradle.version
    • byte-buddy.version / byte.buddy.version
    • commons-text.version / commons.text.version
    • directory-watcher.version / directory.watcher.version
    • grails-publish-plugin.version / grails.publish.version (though this is slightly inconsistent in naming)
    • javaparser-core.version / javaparser.core.version
    • bootstrap-icons.version / bootstrap.icons.version (literal duplicate entries)
    • commons-codec.version / commons.codec.version
    • geb-spock.version / geb.spock.version
    • asset-pipeline-bom.version / asset.pipeline.bom.version
    • spock.version / spock.bom.version (values match but names differ slightly)
    • jackson.version / jackson.bom.version
    • groovy.version / groovy.bom.version
    • selenium.version / selenium.bom.version
  • In 7.0.6-SNAPSHOT:

    • All dotted variants have been removed.
    • Only the hyphenated forms are retained (e.g., byte-buddy.version, asset-pipeline-gradle.version).
    • This eliminates redundancy and enforces consistency.
  • Additionally, Grails-specific properties in 7.0.5 use dots in their names (e.g., grails.async.version, grails.data.hibernate5.version).

  • In 7.0.6-SNAPSHOT, these have been refactored to use hyphens instead (e.g., grails-async.version, grails-data-hibernate5.version). This aligns them with the third-party property naming convention.

2. Renaming and Prefixing of Profile-Related Properties

  • In 7.0.5, profile-related versions use short, unprefixed names:
    • base.version
    • plugin.version
    • profile.version
    • rest.api.version
    • rest.api.plugin.version
    • web.version
    • web.plugin.version
  • In 7.0.6-SNAPSHOT, these have been renamed with a grails-profile- prefix and hyphens for consistency:
    • grails-profile-base.version
    • grails-profile-plugin.version
    • grails-profile-profile.version
    • grails-profile-rest-api.version
    • grails-profile-rest-api-plugin.version
    • grails-profile-web.version
    • grails-profile-web-plugin.version

3. Removal of Redundant or Unused Properties

  • Several groups of related properties in 7.0.5 have been consolidated or removed in 7.0.6-SNAPSHOT:
    • Liquibase: 7.0.5 has multiple (liquibase-hibernate5.version, liquibase.version, liquibase.cdi.version, liquibase.core.version, liquibase5.hibernate.version). 7.0.6-SNAPSHOT retains only liquibase-hibernate5.version.
    • MongoDB: 7.0.5 has multiple (mongodb.version, bson.version, mongodb.driver.core.version, mongodb.driver.sync.version, bson.record.codec.version). 7.0.6-SNAPSHOT retains only mongodb.version.
    • Sitemesh: 7.0.5 has sitemesh.version, starter-sitemesh.version, spring.boot.starter.sitemesh.version. 7.0.6-SNAPSHOT removes spring.boot.starter.sitemesh.version.
    • Ant: 7.0.5 has separate ant.version and ant.junit.version (both identical). 7.0.6-SNAPSHOT removes ant.junit.version.
    • Spring Boot sub-components: 7.0.5 has separate spring.boot.cli.version and spring.boot.gradle.plugin.version (matching spring-boot.version). 7.0.6-SNAPSHOT removes them, implying direct use of spring-boot.version.
    • Asciidoctor Gradle: 7.0.5 has asciidoctor.gradle.jvm.version (4.0.5). 7.0.6-SNAPSHOT renames it to asciidoctor-gradle-jvm.version (still 4.0.5) and keeps asciidoctorj.version (3.0.0) separate.
    • Spring Boot dependencies: 7.0.5 has spring.boot.dependencies.version. 7.0.6-SNAPSHOT removes it (now directly uses spring-boot.version).
    • Liquibase Hibernate: 7.0.5 has liquibase.hibernate5.version (duplicate of liquibase-hibernate5.version). 7.0.6-SNAPSHOT removes it.

4. Specific Property Value Changes

  • rxjava.version (for RxJava 1.x, groupId io.reactivex):
    • 7.0.5: 3.1.11 (incorrect, as this is an RxJava 3.x version).
    • 7.0.6-SNAPSHOT: Corrected to 1.3.8 (proper last version for RxJava 1.x).
  • rxjava2.version (for RxJava 2.x, groupId io.reactivex.rxjava2):
    • 7.0.5: Effectively 3.1.11 (incorrect; the dependency referenced ${rxjava.version}, which was set to an RxJava 3.x version).
    • 7.0.6-SNAPSHOT: Corrected to 2.2.21 (proper version for RxJava 2.x, now using the dedicated ${rxjava2.version} in the dependency declaration).
  • rxjava3.version (for RxJava 3.x, groupId io.reactivex.rxjava3):
    • 7.0.5: Effectively 3.1.11 (via ${rxjava.version} in the dependency declaration).
    • 7.0.6-SNAPSHOT: Remains 3.1.11 (now using the dedicated ${rxjava3.version}).
  • No other third-party version bumps (e.g., Spring Boot remains 3.5.9, Groovy 4.0.29, Jackson 2.19.1, etc.).

5. Additions and Refinements in <dependencyManagement>

  • In 7.0.5, the <dependencyManagement> section imports external BOMs (e.g., spring-boot-dependencies, asset-pipeline-bom, spock-bom, etc.), and uses properties for versions (e.g., ${spring.boot.dependencies.version}, ${asset-pipeline-bom.version}).
  • In 7.0.6-SNAPSHOT:
    • The spring-boot-dependencies import now uses ${spring-boot.version} directly (aligning with the removal of spring.boot.dependencies.version).
    • Several internal Grails artifacts are explicitly declared with versions referenced via properties (e.g., ${grails-gsp-spring-boot.version}, ${grails-gradle-plugins.version}), but since those properties are set to 7.0.6-SNAPSHOT, it supports snapshot builds.
    • Direct dependencies for RxJava variants (io.reactivex:rxjava, io.reactivex.rxjava2:rxjava, io.reactivex.rxjava3:rxjava) are refined to use the correct, dedicated version properties (as noted in section 4), fixing the previous misuse of a single ${rxjava.version} for all three.

@jdaugherty
Copy link
Contributor Author

I've added the documentation as suggested (with some updates). Please take a look @jamesfredley

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

grails-bom:7.0.4 rxjava versions incorrect

2 participants