This is an automated email from the ASF dual-hosted git repository.

jamesfredley pushed a commit to branch 8.0.x
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 6ebc60c6d06b41505598ddb0c44ed129b98ffa65
Merge: fc747cc76a a23982c581
Author: James Fredley <[email protected]>
AuthorDate: Thu May 21 16:07:33 2026 -0400

    Merge branch '7.2.x' into 8.0.x
    
    Conflicts resolved:
    - NOTICE: kept both Spring Hibernate 5 (HEAD) and Roboto Font (7.2.x) 
sections
    - gradle.properties: kept HEAD micronautPlatformVersion=5.0.0-M2,
      grailsSpringSecurityVersion=8.0.0-SNAPSHOT and the skipMicronautProjects
      documentation; pulled forward micronautRxjava2Version=2.9.0 and
      micronautSerdeJacksonVersion=2.11.0 since they are referenced by
      grails-data-graphql build scripts
    - settings.gradle: added grails-test-examples-jetty include; micronaut
      test-example entries remain inside the existing skipMicronautProjects
      conditional block on 8.0.x
    - grails-doc/src/en/guide/toc.yml: kept both upgrading80x and upgrading72x
    - dependencies.gradle: kept HEAD's refactored BOM structure and pulled
      forward graphql-java, graphql-java-extended-scalars and
      spring-webmvc-sitemesh entries plus the groovy 4.0.31 -> 4.0.32 bump;
      kept released starter-sitemesh 3.2.2 instead of 7.2.x's SNAPSHOT
    - grails-data-graphql/examples/spring-boot-app/build.gradle: accepted
      deletion; the example moved to 
grails-test-examples/graphql/spring-boot-app/
    - grails-data-graphql/settings.gradle: accepted deletion; the standalone
      settings is obsolete now that grails-data-graphql is part of the monorepo
    
    This merge also pulls forward the GroovyChangeLogSpec fix (commit 
e32d845db8,
    "Make capturing Liquibase log output more reliable") that resolves the
    :grails-data-hibernate5-dbmigration:test failure on 8.0.x CI by routing
    Liquibase JUL output through jul-to-slf4j so OutputCaptureExtension can
    observe it.
    
    Assisted-by: claude-code:claude-4.7-opus

 .gitattributes                                     |  53 +++
 .github/vote_templates/announce.txt                |   4 +
 .github/vote_templates/staged.txt                  |   7 -
 .github/workflows/groovy-joint-workflow.yml        |   4 +-
 .github/workflows/release.yml                      |   2 +
 NOTICE                                             |   6 +
 RELEASE.md                                         |  18 +-
 RENAME.md                                          |   2 +
 .../buildsrc/GrailsRepoSettingsPlugin.groovy       |   2 +
 .../main/resources/application.yml => codecov.yml  |  27 +-
 dependencies.gradle                                |   8 +-
 etc/bin/Dockerfile                                 |   9 +
 etc/bin/rename_gradle_artifacts.sh                 |   2 +
 etc/bin/verify-cli-distribution.sh                 |  18 +
 etc/bin/verify-wrapper-distribution.sh             |  19 +
 etc/bin/verify.sh                                  |   5 +
 gradle.properties                                  |   2 +
 gradle/publish-root-config.gradle                  |   3 +
 .../reporting/DefaultStackTraceFilterer.java       |  56 ++-
 .../exceptions/reporting/StackTraceFilterer.java   |   6 +
 .../src/main/groovy/grails/config/Settings.groovy  |  35 ++
 .../reporting/StackTraceFiltererSpec.groovy        | 300 ++++++++++----
 .../src/main/resources/fonts/archia-bold.eot       | Bin 15838 -> 0 bytes
 .../src/main/resources/fonts/archia-bold.ttf       | Bin 41696 -> 0 bytes
 .../src/main/resources/fonts/archia-bold.woff      | Bin 19684 -> 0 bytes
 .../src/main/resources/fonts/archia-bold.woff2     | Bin 14136 -> 0 bytes
 .../src/main/resources/fonts/archia-light.eot      | Bin 42146 -> 0 bytes
 .../src/main/resources/fonts/archia-light.ttf      | Bin 41864 -> 0 bytes
 .../src/main/resources/fonts/archia-light.woff     | Bin 19908 -> 0 bytes
 .../src/main/resources/fonts/archia-light.woff2    | Bin 14240 -> 0 bytes
 .../src/main/resources/fonts/archia-medium.eot     | Bin 16471 -> 0 bytes
 .../src/main/resources/fonts/archia-medium.ttf     | Bin 43528 -> 0 bytes
 .../src/main/resources/fonts/archia-medium.woff    | Bin 20436 -> 0 bytes
 .../src/main/resources/fonts/archia-medium.woff2   | Bin 14484 -> 0 bytes
 .../src/main/resources/fonts/archia-regular.eot    | Bin 15329 -> 0 bytes
 .../src/main/resources/fonts/archia-regular.ttf    | Bin 41328 -> 0 bytes
 .../src/main/resources/fonts/archia-regular.woff   | Bin 19244 -> 0 bytes
 .../src/main/resources/fonts/archia-regular.woff2  | Bin 13656 -> 0 bytes
 .../src/main/resources/fonts/archia-semibold.eot   | Bin 43510 -> 0 bytes
 .../src/main/resources/fonts/archia-semibold.ttf   | Bin 43216 -> 0 bytes
 .../src/main/resources/fonts/archia-semibold.woff  | Bin 20240 -> 0 bytes
 .../src/main/resources/fonts/archia-semibold.woff2 | Bin 14460 -> 0 bytes
 .../src/main/resources/fonts/archia-thin.eot       | Bin 15796 -> 0 bytes
 .../src/main/resources/fonts/archia-thin.ttf       | Bin 41700 -> 0 bytes
 .../src/main/resources/fonts/archia-thin.woff      | Bin 19676 -> 0 bytes
 .../src/main/resources/fonts/archia-thin.woff2     | Bin 14004 -> 0 bytes
 .../src/main/resources/stylesheets/screen.css      |  57 +--
 grails-data-graphql/README.md                      |  35 +-
 grails-data-graphql/build.gradle                   | 101 -----
 grails-data-graphql/core/build.gradle              |  78 ++--
 .../groovy/org/grails/gorm/graphql/Schema.groovy   |  26 +-
 .../gorm/graphql/entity/EntityFetchOptions.java    |  14 +-
 .../graphql/entity/dsl/helpers/ComplexTyped.groovy |   7 +-
 .../gorm/graphql/entity/fields/ComplexField.groovy |   4 +-
 .../grails/gorm/graphql/entity/fields/Field.groovy |  40 +-
 .../gorm/graphql/entity/fields/SimpleField.groovy  |  34 +-
 .../entity/operations/CustomOperation.groovy       |   5 +-
 .../graphql/entity/operations/ListOperation.groovy |   1 +
 .../graphql/entity/operations/OperationType.groovy |   1 +
 .../graphql/fetcher/BindingGormDataFetcher.groovy  |   2 +-
 .../graphql/fetcher/DefaultGormDataFetcher.groovy  |   2 +-
 .../graphql/fetcher/DeletingGormDataFetcher.groovy |   2 +-
 .../gorm/graphql/fetcher/GormDataFetcher.groovy    |   2 +-
 .../fetcher/PaginatingGormDataFetcher.groovy       |   2 +-
 .../graphql/fetcher/ReadingGormDataFetcher.groovy  |   2 +-
 .../fetcher/impl/CountEntityDataFetcher.groovy     |   2 +-
 .../fetcher/impl/CreateEntityDataFetcher.groovy    |   2 +-
 .../fetcher/impl/DeleteEntityDataFetcher.groovy    |   2 +-
 .../graphql/fetcher/impl/EntityDataFetcher.groovy  |   2 +-
 .../fetcher/impl/PaginatedEntityDataFetcher.groovy |   2 +-
 .../fetcher/impl/SingleEntityDataFetcher.groovy    |   2 +-
 .../fetcher/impl/UpdateEntityDataFetcher.groovy    |   2 +-
 .../testing/MockDataFetchingEnvironment.groovy     |  16 +-
 .../graphql/types/DefaultGraphQLTypeManager.groovy |  14 +-
 .../gorm/graphql/types/GraphQLOperationType.groovy |   1 +
 .../types/output/AbstractObjectTypeBuilder.groovy  | 176 +++++++++
 .../output/EmbeddedObjectTypeBuilder.groovy}       |  25 +-
 .../output/ObjectTypeBuilder.groovy}               |  15 +-
 .../types/output/PaginatedObjectTypeBuilder.groovy |  61 +++
 .../output/ShowObjectTypeBuilder.groovy}           |  23 +-
 .../graphql/types/scalars/CustomScalars.groovy     |  11 +-
 ...Spec.groovy => MongoSchemaSpec.groovy.disabled} |   0
 .../HibernatePersistentGraphQLPropertySpec.groovy  |   4 +-
 .../DefaultGraphQLDomainPropertyManagerSpec.groovy |  14 +-
 .../EmbeddedInputObjectTypeBuilderSpec.groovy      |   4 +-
 .../output/EmbeddedObjectTypeBuilderSpec.groovy    | 105 +++++
 .../types/output/ShowObjectTypeBuilderSpec.groovy  | 106 +++++
 grails-data-graphql/docs/build.gradle              |  52 ++-
 .../docs/src/main/docs/guide/types.adoc            |   2 +-
 grails-data-graphql/docs/src/main/docs/index.adoc  | 107 +++++
 .../examples/grails-docs-app/build.gradle          |  60 ---
 .../grails-multi-datastore-app/build.gradle        |  72 ----
 .../examples/grails-tenant-app/build.gradle        |  66 ----
 .../examples/grails-test-app/build.gradle          |  63 ---
 .../examples/spring-boot-app/build.gradle          |  68 ----
 .../com/example/demo/AuthorIntegrationTests.groovy |  46 ---
 grails-data-graphql/gradle.properties              |  52 ---
 grails-data-graphql/plugin/build.gradle            | 110 ++++--
 .../gorm/graphql/plugin/GraphqlController.groovy   |  12 +-
 .../init/gorm/graphql/Application.groovy           |   3 +-
 .../graphql/plugin/GormGraphqlGrailsPlugin.groovy  | 107 ++---
 .../plugin/GrailsGraphQLConfiguration.groovy       |  13 +-
 .../graphql/plugin/GraphQLContextBuilder.groovy    |   2 +-
 .../gorm/graphql/plugin/GraphQLRequest.groovy      |   6 +-
 .../gorm/graphql/plugin/testing/GraphQLSpec.groovy |   2 +-
 .../gorm/graphql/GraphqlControllerSpec.groovy      |   7 +-
 grails-data-graphql/settings.gradle                |  75 ----
 grails-data-hibernate5/dbmigration/build.gradle    |   8 +
 .../src/test/resources/logging.properties          |   6 +-
 .../bson/codecs/encoders/IdentityEncoder.groovy    |  48 +++
 .../mapping/mongo/MongoCodecSession.groovy         |  24 +-
 .../mapping/mongo/config/MongoMappingContext.java  |  55 ++-
 .../mapping/mongo/config/MongoSettings.groovy      |  14 +
 .../AbstractMongoConnectionSourceSettings.groovy   |  11 +
 .../mongo/connections/StringIdSettings.groovy      |  30 +-
 .../mongo/engine/MongoCodecEntityPersister.groovy  |  25 +-
 .../mapping/mongo/engine/MongoIdCoercion.java      |  93 +++++
 .../engine/codecs/PersistentEntityCodec.groovy     |  35 +-
 .../datastore/mapping/mongo/query/MongoQuery.java  |  54 ++-
 .../SingleEmbeddedAssignNullToNonNullSpec.groovy   | 146 +++++++
 .../bugs/StringIdDefaultStoredAsConfigSpec.groovy  | 132 +++++++
 .../bugs/StringIdWithObjectIdStorageSpec.groovy    | 432 +++++++++++++++++++++
 .../asciidoc/gettingStarted/advancedConfig.adoc    |   2 +
 .../docs/asciidoc/objectMapping/idGeneration.adoc  |  63 ++-
 .../core/grailsversion/GrailsVersionSpec.groovy    |   2 +-
 .../datastore/mapping/config/Property.groovy       |  14 +
 .../datastore/mapping/model/IdentityMapping.java   |  15 +
 .../datastore/mapping/model/MappingFactory.java    |  21 +-
 .../config/logging/loggingFullStackTraces.adoc     | 212 ++++++++++
 grails-doc/src/en/guide/index.adoc                 |   5 +
 .../src/en/guide/theWebLayer/gsp/layouts.adoc      |  25 +-
 grails-doc/src/en/guide/toc.yml                    |   2 +
 .../src/en/guide/upgrading/upgrading71x.adoc       |  56 +++
 .../src/en/guide/upgrading/upgrading72x.adoc       | 102 +++++
 .../grails/forge/feature/database/GraphqlGorm.java |  95 +++++
 .../forge/feature/database/GraphqlGormSpec.groovy  | 106 +++++
 grails-gsp/grails-sitemesh3/build.gradle           |  54 +--
 .../sitemesh3/GrailsLayoutHandlerMapping.java      |  68 ----
 .../plugins/sitemesh3/Sitemesh3GrailsPlugin.groovy |  79 ++--
 .../plugins/sitemesh3/Sitemesh3LayoutTagLib.groovy | 262 +++++++++++++
 .../plugins/web/taglib/RenderSitemeshTagLib.groovy | 136 ++++---
 .../sitemesh3/CaptureAwareContentProcessor.java    |  99 +++++
 .../plugins/sitemesh3/GrailsSiteMeshView.java      |  85 ++++
 .../sitemesh3/GrailsSiteMeshViewContext.java       | 103 +++++
 .../sitemesh3/GrailsSiteMeshViewResolver.java      |  57 +++
 ...railsSiteMeshViewResolverBeanPostProcessor.java |  45 +++
 .../sitemesh3/Sitemesh3AutoConfiguration.java      |  49 +++
 .../plugins/sitemesh3/Sitemesh3CapturedPage.java   | 370 ++++++++++++++++++
 .../Sitemesh3EnvironmentPostProcessor.java         |  70 ++++
 .../plugins/sitemesh3/Sitemesh3LayoutFinder.java   | 263 +++++++++++++
 .../src/main/resources/META-INF/spring.factories   |   2 +
 ...rk.boot.autoconfigure.AutoConfiguration.imports |   1 +
 ...ework.boot.env.EnvironmentPostProcessor.imports |   1 +
 .../CaptureAwareContentProcessorSpec.groovy        | 134 +++++++
 .../sitemesh3/GrailsSiteMeshViewContextSpec.groovy |  91 +++++
 ...iteMeshViewResolverBeanPostProcessorSpec.groovy |  71 ++++
 .../GrailsSiteMeshViewResolverSpec.groovy          |  89 +++++
 .../Sitemesh3EnvironmentPostProcessorSpec.groovy   |  71 ++++
 .../sitemesh3/Sitemesh3LayoutFinderSpec.groovy     | 199 ++++++++++
 .../java/grails/gsp/boot/GspAutoConfiguration.java |  10 -
 .../graphql/grails-docs-app/build.gradle           |  74 ++++
 .../grails-app/conf/application.yml                |   0
 .../grails-docs-app/grails-app/conf/logback.xml    |   0
 .../grails-app/conf/spring/resources.groovy        |   0
 .../grails/docs/app/ApplicationController.groovy   |   0
 .../controllers/grails/docs/app/UrlMappings.groovy |   0
 .../grails-app/domain/demo/Author.groovy           |   0
 .../grails-app/domain/demo/Book.groovy             |   0
 .../grails-app/domain/demo/Speaker.groovy          |   0
 .../grails-app/domain/demo/Talk.groovy             |   0
 .../grails-app/i18n/messages.properties            |   0
 .../grails-app/i18n/messages_cs_CZ.properties      |   0
 .../grails-app/i18n/messages_da.properties         |   0
 .../grails-app/i18n/messages_de.properties         |   0
 .../grails-app/i18n/messages_es.properties         |   0
 .../grails-app/i18n/messages_fr.properties         |   0
 .../grails-app/i18n/messages_it.properties         |   0
 .../grails-app/i18n/messages_ja.properties         |   0
 .../grails-app/i18n/messages_nb.properties         |   0
 .../grails-app/i18n/messages_nl.properties         |   0
 .../grails-app/i18n/messages_pl.properties         |   0
 .../grails-app/i18n/messages_pt_BR.properties      |   0
 .../grails-app/i18n/messages_pt_PT.properties      |   0
 .../grails-app/i18n/messages_ru.properties         |   0
 .../grails-app/i18n/messages_sv.properties         |   0
 .../grails-app/i18n/messages_th.properties         |   0
 .../grails-app/i18n/messages_zh_CN.properties      |   0
 .../init/grails/docs/app/Application.groovy        |   0
 .../init/grails/docs/app/BootStrap.groovy          |   0
 .../grails-app/services/demo/SpeakerService.groovy |   0
 .../grails-app/views/application/index.gson        |   0
 .../grails-docs-app/grails-app/views/error.gson    |   0
 .../grails-app/views/errors/_errors.gson           |   0
 .../grails-docs-app/grails-app/views/notFound.gson |   0
 .../grails-app/views/object/_object.gson           |   0
 .../groovy/demo/AuthorIntegrationSpec.groovy       |   0
 .../groovy/demo/SpeakerIntegrationSpec.groovy      |   0
 .../src/main/groovy/demo/AuthorDataBinder.groovy   |   0
 .../src/main/groovy/demo/GraphQLCustomizer.groovy  |   0
 .../grails-multi-datastore-app/build.gradle        |  78 ++++
 .../grails-app/conf/application.yml                |   0
 .../grails-app/conf/logback.groovy                 |   0
 .../grails-app/conf/spring/resources.groovy        |   0
 .../controllers/myapp/ApplicationController.groovy |   0
 .../controllers/myapp/UrlMappings.groovy           |   0
 .../grails-app/domain/myapp/Bar.groovy             |   0
 .../grails-app/domain/myapp/Foo.groovy             |   0
 .../grails-app/i18n/messages.properties            |   0
 .../grails-app/i18n/messages_cs_CZ.properties      |   0
 .../grails-app/i18n/messages_da.properties         |   0
 .../grails-app/i18n/messages_de.properties         |   0
 .../grails-app/i18n/messages_es.properties         |   0
 .../grails-app/i18n/messages_fr.properties         |   0
 .../grails-app/i18n/messages_it.properties         |   0
 .../grails-app/i18n/messages_ja.properties         |   0
 .../grails-app/i18n/messages_nb.properties         |   0
 .../grails-app/i18n/messages_nl.properties         |   0
 .../grails-app/i18n/messages_pl.properties         |   0
 .../grails-app/i18n/messages_pt_BR.properties      |   0
 .../grails-app/i18n/messages_pt_PT.properties      |   0
 .../grails-app/i18n/messages_ru.properties         |   0
 .../grails-app/i18n/messages_sv.properties         |   0
 .../grails-app/i18n/messages_th.properties         |   0
 .../grails-app/i18n/messages_zh_CN.properties      |   0
 .../grails-app/init/myapp/Application.groovy       |   0
 .../grails-app/init/myapp/BootStrap.groovy         |   0
 .../grails-app/views/application/index.gson        |   0
 .../grails-app/views/error.gson                    |   0
 .../grails-app/views/errors/_errors.gson           |   0
 .../grails-app/views/notFound.gson                 |   0
 .../grails-app/views/object/_object.gson           |   0
 .../groovy/myapp/BarIntegrationSpec.groovy         |   2 +-
 .../groovy/myapp/FooIntegrationSpec.groovy         |   2 +-
 .../main/groovy/myapp/MyGraphQLCustomizer.groovy   |   0
 .../main/groovy/myapp/ObjectIdJsonConverter.groovy |   0
 ...ils.plugin.json.builder.JsonGenerator$Converter |   0
 .../graphql/grails-tenant-app/build.gradle         |  74 ++++
 .../grails-app/conf/application.yml                |   0
 .../grails-tenant-app/grails-app/conf/logback.xml  |   0
 .../grails-app/conf/spring/resources.groovy        |   0
 .../grails/tenant/app/ApplicationController.groovy |   0
 .../grails/tenant/app/UrlMappings.groovy           |   0
 .../domain/grails/tenant/app/User.groovy           |   2 +
 .../grails-app/i18n/messages.properties            |   0
 .../grails-app/i18n/messages_cs_CZ.properties      |   0
 .../grails-app/i18n/messages_da.properties         |   0
 .../grails-app/i18n/messages_de.properties         |   0
 .../grails-app/i18n/messages_es.properties         |   0
 .../grails-app/i18n/messages_fr.properties         |   0
 .../grails-app/i18n/messages_it.properties         |   0
 .../grails-app/i18n/messages_ja.properties         |   0
 .../grails-app/i18n/messages_nb.properties         |   0
 .../grails-app/i18n/messages_nl.properties         |   0
 .../grails-app/i18n/messages_pl.properties         |   0
 .../grails-app/i18n/messages_pt_BR.properties      |   0
 .../grails-app/i18n/messages_pt_PT.properties      |   0
 .../grails-app/i18n/messages_ru.properties         |   0
 .../grails-app/i18n/messages_sv.properties         |   0
 .../grails-app/i18n/messages_th.properties         |   0
 .../grails-app/i18n/messages_zh_CN.properties      |   0
 .../init/grails/tenant/app/Application.groovy      |   0
 .../init/grails/tenant/app/BootStrap.groovy        |   0
 .../grails-app/views/application/index.gson        |   0
 .../grails-tenant-app/grails-app/views/error.gson  |   0
 .../grails-app/views/errors/_errors.gson           |   0
 .../grails-app/views/notFound.gson                 |   0
 .../grails-app/views/object/_object.gson           |   0
 .../grails/tenant/app/UserIntegrationSpec.groovy   |   0
 .../tenant/app/GraphqlMultiTenantSpec.groovy       |   0
 .../graphql/grails-test-app/build.gradle           |  75 ++++
 .../grails-app/conf/application.yml                |   0
 .../grails-test-app/grails-app/conf/logback.xml    |   0
 .../grails-app/conf/spring/resources.groovy        |   0
 .../grails/test/app/ApplicationController.groovy   |   0
 .../controllers/grails/test/app/UrlMappings.groovy |   0
 .../domain/grails/test/app/Address.groovy          |   0
 .../domain/grails/test/app/ArguedField.groovy      |   0
 .../domain/grails/test/app/Artist.groovy           |   0
 .../domain/grails/test/app/Author.groovy           |   0
 .../grails-app/domain/grails/test/app/Book.groovy  |   0
 .../domain/grails/test/app/Comment.groovy          |   0
 .../grails/test/app/CreditCardPayment.groovy       |   0
 .../domain/grails/test/app/GrailsTeamMember.groovy |   0
 .../domain/grails/test/app/NumberLength.groovy     |   0
 .../domain/grails/test/app/Payment.groovy          |   0
 .../grails-app/domain/grails/test/app/Post.groovy  |   0
 .../domain/grails/test/app/Restricted.groovy       |   0
 .../grails-app/domain/grails/test/app/Role.groovy  |   0
 .../domain/grails/test/app/SimpleComposite.groovy  |   0
 .../domain/grails/test/app/SoftDelete.groovy       |   0
 .../grails-app/domain/grails/test/app/Tag.groovy   |   0
 .../domain/grails/test/app/TypeTest.groovy         |   0
 .../domain/grails/test/app/UnsupportedType.groovy  |   0
 .../grails-app/domain/grails/test/app/User.groovy  |   5 +
 .../domain/grails/test/app/UserRole.groovy         |   0
 .../domain/grails/test/app/inheritance/Dog.groovy  |   0
 .../grails/test/app/inheritance/Human.groovy       |   0
 .../grails/test/app/inheritance/Labradoodle.groovy |   0
 .../grails/test/app/inheritance/LandMammal.groovy  |   0
 .../grails/test/app/inheritance/Mammal.groovy      |   0
 .../grails/test/app/manyToMany/Classes.groovy      |   0
 .../grails/test/app/manyToMany/Student.groovy      |   0
 .../grails-app/i18n/messages.properties            |   0
 .../grails-app/i18n/messages_cs_CZ.properties      |   0
 .../grails-app/i18n/messages_da.properties         |   0
 .../grails-app/i18n/messages_de.properties         |   0
 .../grails-app/i18n/messages_es.properties         |   0
 .../grails-app/i18n/messages_fr.properties         |   0
 .../grails-app/i18n/messages_it.properties         |   0
 .../grails-app/i18n/messages_ja.properties         |   0
 .../grails-app/i18n/messages_nb.properties         |   0
 .../grails-app/i18n/messages_nl.properties         |   0
 .../grails-app/i18n/messages_pl.properties         |   0
 .../grails-app/i18n/messages_pt_BR.properties      |   0
 .../grails-app/i18n/messages_pt_PT.properties      |   0
 .../grails-app/i18n/messages_ru.properties         |   0
 .../grails-app/i18n/messages_sv.properties         |   0
 .../grails-app/i18n/messages_th.properties         |   0
 .../grails-app/i18n/messages_zh_CN.properties      |   0
 .../init/grails/test/app/Application.groovy        |   0
 .../init/grails/test/app/BootStrap.groovy          |   0
 .../services/grails/test/app/DogService.groovy     |   0
 .../grails/test/app/GrailsTeamMemberService.groovy |   0
 .../services/grails/test/app/HumanService.groovy   |   0
 .../grails/test/app/LabradoodleService.groovy      |   0
 .../grails-app/views/application/index.gson        |   0
 .../grails-test-app/grails-app/views/error.gson    |   0
 .../grails-app/views/errors/_errors.gson           |   0
 .../grails-test-app/grails-app/views/notFound.gson |   0
 .../grails-app/views/object/_object.gson           |   0
 .../test/app/ArguedFieldIntegrationSpec.groovy     |   0
 .../grails/test/app/ArtistIntegrationSpec.groovy   |   0
 .../grails/test/app/AuthorIntegrationSpec.groovy   |   0
 .../grails/test/app/BookIntegrationSpec.groovy     |   0
 .../grails/test/app/CommentIntegrationSpec.groovy  |   6 +-
 .../app/GrailsTeamMemberIntegrationSpec.groovy     |   0
 .../test/app/InheritanceIntegrationSpec.groovy     |   0
 .../test/app/NumberLengthIntegrationSpec.groovy    |   0
 .../grails/test/app/PaymentIntegrationSpec.groovy  |   0
 .../grails/test/app/PostIntegrationSpec.groovy     |  21 +-
 .../test/app/RestrictedIntegrationSpec.groovy      |   0
 .../test/app/SimpleCompositeIntegrationSpec.groovy |   0
 .../test/app/SoftDeleteIntegrationSpec.groovy      |   0
 .../grails/test/app/TagIntegrationSpec.groovy      |  17 +-
 .../grails/test/app/TypeTestIntegrationSpec.groovy |   0
 .../grails/test/app/UserIntegrationSpec.groovy     |   0
 .../grails/test/app/UserRoleIntegrationSpec.groovy |   4 +-
 .../grails/test/app/GraphQLCustomizer.groovy       |   0
 .../test/app/RevokeAllRolesDataFetcher.groovy      |   0
 .../groovy/grails/test/app/RoleDataBinder.groovy   |   0
 .../groovy/grails/test/app/UserDataBinder.groovy   |   0
 .../grails/test/app/UsersByRoleDataFetcher.groovy  |   0
 .../groovy/grails/test/app/pogo/Painting.groovy    |   0
 .../groovy/grails/test/app/pogo/Profile.groovy     |   0
 .../test/app/manyToMany/StudentSchemaSpec.groovy   |   0
 .../graphql/spring-boot-app/build.gradle           |  73 ++++
 .../groovy/com/example/demo/DemoApplication.groovy |   0
 .../demo/controllers/GraphQLController.groovy      |   0
 .../groovy/com/example/demo/domains/Author.groovy  |  15 +-
 .../src/main/resources/application.yml             |   0
 .../com/example/demo/AuthorIntegrationTests.groovy |  56 +++
 .../com/example/demo/DemoApplicationTests.groovy   |  15 +-
 grails-test-examples/gsp-sitemesh3/build.gradle    |   1 +
 .../grails/layout/EndToEndController.groovy        |  14 +
 .../integration-test/groovy/EndToEndSpec.groovy    |  28 +-
 grails-test-examples/issue-10279/build.gradle      |  48 +++
 .../issue-10279/grails-app/conf/application.groovy |  26 ++
 .../issue-10279/grails-app/conf}/application.yml   |  32 +-
 .../issue-10279}/grails-app/conf/logback.xml       |   6 +-
 .../controllers/issue10279/UrlMappings.groovy      |  25 ++
 .../grails-app/init/issue10279/Application.groovy  |  28 ++
 .../issue10279/ActuatorEnvClosureSpec.groovy       |  56 +++
 .../{gsp-sitemesh3 => jetty}/build.gradle          |  35 +-
 .../grails-app/assets/javascripts/application.js   |  16 +
 .../grails-app/assets/stylesheets/application.css  |  18 +
 .../jetty/grails-app/conf/application.yml          |  60 +++
 .../jetty/grails-app/conf/logback-spring.xml       |  23 +-
 .../jetty}/grails-app/conf/spring/resources.groovy |   0
 .../issue12688/SessionController.groovy            |  21 +-
 .../controllers/issue12688/UrlMappings.groovy      |  22 +-
 .../grails-app/init/issue12688}/Application.groovy |   4 +-
 .../grails-app/init/issue12688/BootStrap.groovy    |  10 +-
 .../jetty/grails-app/views/error.gsp               |  29 ++
 .../jetty/grails-app/views/index.gsp               |  28 ++
 .../jetty/grails-app/views/notFound.gsp            |  28 ++
 .../jetty/grails-app/views/session/index.gsp       |  30 ++
 .../jetty/grails-app/views/session/show.gsp        |  27 ++
 .../groovy/issue12688/JettySessionSpec.groovy      |  51 +++
 .../groovy/issue12688/pages/SessionFormPage.groovy |  15 +-
 .../groovy/issue12688/pages/SessionShowPage.groovy |  18 +-
 .../org/grails/web/errors/AuditorAwareLookup.java  | 101 +++++
 .../grails/web/errors/GrailsExceptionResolver.java | 116 ++++++
 .../web/errors/GrailsExceptionResolverSpec.groovy  | 263 ++++++++++++-
 .../mvc/AbstractGrailsControllerUrlMappings.groovy |  22 +-
 .../mvc/WildcardActionValidationSpec.groovy        |  30 ++
 settings.gradle                                    |  33 ++
 396 files changed, 7186 insertions(+), 1356 deletions(-)

diff --cc .github/workflows/groovy-joint-workflow.yml
index 6949e938c4,7d79648002..6ad2ec94f3
--- a/.github/workflows/groovy-joint-workflow.yml
+++ b/.github/workflows/groovy-joint-workflow.yml
@@@ -38,10 -38,10 +38,10 @@@ jobs
        - name: "☕️ Setup JDK"
          uses: actions/setup-java@v4
          with:
 -          java-version: 17
 +          java-version: 21
            distribution: liberica
        - name: "🗄️ Cache local Maven repository"
-         uses: actions/cache@v4
+         uses: actions/cache@v5
          with:
            path: ~/.m2/repository
            key: cache-local-maven-${{ github.sha }}
diff --cc NOTICE
index 5a32f68c21,cd31fd4799..d026681e85
--- a/NOTICE
+++ b/NOTICE
@@@ -24,8 -24,8 +24,14 @@@ http://www.oracle.com/webfolder/technet
  This product includes software developed by the OpenSymphony Group 
(http://www.opensymphony.com/). It uses Sitemesh2,
  licensed under the OpenSymphony Software License, Version 1.1. See 
licenses/LICENSE-opensymphony.txt for the full license terms.
  
 +Spring Framework ORM Hibernate 5 Support
 +This product includes software from the Spring Framework project 
(https://spring.io/projects/spring-framework),
 +vendored from Spring Framework 6.2.x. These classes were removed in Spring 
Framework 7.0.
 +Copyright 2002-2024 the original author or authors.
 +Licensed under the Apache License, Version 2.0.
++
+ Roboto Font
+ This product bundles the Roboto font 
(https://fonts.google.com/specimen/Roboto), used by the
+ GORM documentation website under grails-data-docs/data-mapping-website/.
+ Font data copyright Google 2012.
 -Licensed under the Apache License, Version 2.0.
++Licensed under the Apache License, Version 2.0.
diff --cc dependencies.gradle
index 4ef92dbf9f,400ea37eaf..c8a9096511
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@@ -72,30 -67,32 +72,33 @@@ ext 
      ]
  
      bomDependencyVersions = [
 -            'asset-pipeline-bom.version'    : '5.0.34',
 +            'asset-pipeline-bom.version'    : '5.1.0-M4',
              'bootstrap-icons.version'       : '1.13.1',
              'bootstrap.version'             : '5.3.8',
 -            'commons-codec.version'         : '1.18.0',
 +            'commons-codec.version'         : '1.21.0',
              'commons-lang3.version'         : '3.20.0',
              'geb-spock.version'             : '8.0.1',
-             'groovy.version'                : '4.0.31',
+             'graphql-java.version'          : '24.3',
+             'graphql-java-extended-scalars.version': '24.0',
+             'groovy.version'                : '4.0.32',
 -            'jackson.version'               : '2.21.2',
 -            'jquery.version'                : '3.7.1',
              'hibernate-groovy-proxy.version': '1.1',
              'jakarta-servlet-api.version'   : '6.1.0',
 -            'jakarta-validation-api.version': '3.1.1',
 -            'junit.version'                 : '5.13.3',
 -            'junit-platform.version'        : '1.13.3',
 -            'mongodb.version'               : '5.5.2',
 -            'opentelemetry.version'         : '1.55.0',
 +            'jakarta-validation.version': '3.1.1',
 +            'jquery.version'                : '3.7.1',
 +            'junit.version'                 : '6.0.3',
 +            'mongodb.version'               : '5.6.4',
              'rxjava.version'                : '1.3.8',
              'rxjava2.version'               : '2.2.21',
              'rxjava3.version'               : '3.1.12',
              'selenium.version'              : '4.38.0',
 -            'spock.version'                 : '2.3-groovy-4.0',
              'sitemesh.version'              : '2.6.0',
 -            'starter-sitemesh.version'      : '3.2.3-SNAPSHOT',
 -            'spring-webmvc-sitemesh.version': '3.2.3-SNAPSHOT',
 +            'spock.version'                 : '2.3-groovy-4.0',
 +            'starter-sitemesh.version'      : '3.2.2',
++            'spring-webmvc-sitemesh.version': '3.2.2',
 +            // Spring Boot 4 no longer manages spring-retry; pin it here so 
the
 +            // grails-shell-cli SpringRetryCompilerAutoConfiguration's 
unversioned
 +            // reference resolves and consumer apps using @Retryable get a 
known version.
 +            'spring-retry.version'          : '2.0.11',
      ]
  
      // Note: the name of the dependency must be the prefix of the property 
name so properties in the pom are resolved correctly
@@@ -109,70 -107,87 +112,73 @@@
  
      // Note: the name of the dependency must be the prefix of the property 
name so properties in the pom are resolved correctly
      bomDependencies = [
 -            'bootstrap'                   : 
"org.webjars.npm:bootstrap:${bomDependencyVersions['bootstrap.version']}",
 -            'bootstrap-icons'             : 
"org.webjars.npm:bootstrap-icons:${bomDependencyVersions['bootstrap-icons.version']}",
 -            'commons-codec'               : 
"commons-codec:commons-codec:${bomDependencyVersions['commons-codec.version']}",
 -            'commons-lang3'               : 
"org.apache.commons:commons-lang3:${bomDependencyVersions['commons-lang3.version']}",
 -            'geb-spock'                   : 
"org.apache.groovy.geb:geb-spock:${bomDependencyVersions['geb-spock.version']}",
 -            'graphql-java'                : 
"com.graphql-java:graphql-java:${bomDependencyVersions['graphql-java.version']}",
 +            'bootstrap'                : 
"org.webjars.npm:bootstrap:${bomDependencyVersions['bootstrap.version']}",
 +            'bootstrap-icons'          : 
"org.webjars.npm:bootstrap-icons:${bomDependencyVersions['bootstrap-icons.version']}",
 +            'byte-buddy-agent'         : 
"net.bytebuddy:byte-buddy-agent:${gradleBomDependencyVersions['byte-buddy.version']}",
 +            'commons-codec'            : 
"commons-codec:commons-codec:${bomDependencyVersions['commons-codec.version']}",
 +            'commons-lang3'            : 
"org.apache.commons:commons-lang3:${bomDependencyVersions['commons-lang3.version']}",
 +            'geb-spock'                : 
"org.apache.groovy.geb:geb-spock:${bomDependencyVersions['geb-spock.version']}",
++            'graphql-java'             : 
"com.graphql-java:graphql-java:${bomDependencyVersions['graphql-java.version']}",
+             'graphql-java-extended-scalars': 
"com.graphql-java:graphql-java-extended-scalars:${bomDependencyVersions['graphql-java-extended-scalars.version']}",
 -            // start - restate the groovy-bom includes here because the 
spring dependency management will pick the library from 
spring-boot-dependencies otherwise
 -            'groovy'                      : 
"org.apache.groovy:groovy:${bomDependencyVersions['groovy.version']}",
 -            'groovy-ant'                  : 
"org.apache.groovy:groovy-ant:${bomDependencyVersions['groovy.version']}",
 -            'groovy-astbuilder'           : 
"org.apache.groovy:groovy-astbuilder:${bomDependencyVersions['groovy.version']}",
 -            'groovy-cli-commons'          : 
"org.apache.groovy:groovy-cli-commons:${bomDependencyVersions['groovy.version']}",
 -            'groovy-cli-picocli'          : 
"org.apache.groovy:groovy-cli-picocli:${bomDependencyVersions['groovy.version']}",
 -            'groovy-console'              : 
"org.apache.groovy:groovy-console:${bomDependencyVersions['groovy.version']}",
 -            'groovy-contracts'            : 
"org.apache.groovy:groovy-contracts:${bomDependencyVersions['groovy.version']}",
 -            'groovy-datetime'             : 
"org.apache.groovy:groovy-datetime:${bomDependencyVersions['groovy.version']}",
 -            'groovy-dateutil'             : 
"org.apache.groovy:groovy-dateutil:${bomDependencyVersions['groovy.version']}",
 -            'groovy-docgenerator'         : 
"org.apache.groovy:groovy-docgenerator:${bomDependencyVersions['groovy.version']}",
 -            'groovy-ginq'                 : 
"org.apache.groovy:groovy-ginq:${bomDependencyVersions['groovy.version']}",
 -            'groovy-groovydoc'            : 
"org.apache.groovy:groovy-groovydoc:${bomDependencyVersions['groovy.version']}",
 -            'groovy-groovysh'             : 
"org.apache.groovy:groovy-groovysh:${bomDependencyVersions['groovy.version']}",
 -            'groovy-jmx'                  : 
"org.apache.groovy:groovy-jmx:${bomDependencyVersions['groovy.version']}",
 -            'groovy-json'                 : 
"org.apache.groovy:groovy-json:${bomDependencyVersions['groovy.version']}",
 -            'groovy-jsr223'               : 
"org.apache.groovy:groovy-jsr223:${bomDependencyVersions['groovy.version']}",
 -            'groovy-macro'                : 
"org.apache.groovy:groovy-macro:${bomDependencyVersions['groovy.version']}",
 -            'groovy-macro-library'        : 
"org.apache.groovy:groovy-macro-library:${bomDependencyVersions['groovy.version']}",
 -            'groovy-nio'                  : 
"org.apache.groovy:groovy-nio:${bomDependencyVersions['groovy.version']}",
 -            'groovy-servlet'              : 
"org.apache.groovy:groovy-servlet:${bomDependencyVersions['groovy.version']}",
 -            'groovy-sql'                  : 
"org.apache.groovy:groovy-sql:${bomDependencyVersions['groovy.version']}",
 -            'groovy-swing'                : 
"org.apache.groovy:groovy-swing:${bomDependencyVersions['groovy.version']}",
 -            'groovy-templates'            : 
"org.apache.groovy:groovy-templates:${bomDependencyVersions['groovy.version']}",
 -            'groovy-test'                 : 
"org.apache.groovy:groovy-test:${bomDependencyVersions['groovy.version']}",
 -            'groovy-test-junit5'          : 
"org.apache.groovy:groovy-test-junit5:${bomDependencyVersions['groovy.version']}",
 -            'groovy-testng'               : 
"org.apache.groovy:groovy-testng:${bomDependencyVersions['groovy.version']}",
 -            'groovy-toml'                 : 
"org.apache.groovy:groovy-toml:${bomDependencyVersions['groovy.version']}",
 -            'groovy-typecheckers'         : 
"org.apache.groovy:groovy-typecheckers:${bomDependencyVersions['groovy.version']}",
 -            'groovy-xml'                  : 
"org.apache.groovy:groovy-xml:${bomDependencyVersions['groovy.version']}",
 -            'groovy-yaml'                 : 
"org.apache.groovy:groovy-yaml:${bomDependencyVersions['groovy.version']}",
 -            // end - restate the groovy-bom here because the spring 
dependency management
 -            'jquery'                      : 
"org.webjars.npm:jquery:${bomDependencyVersions['jquery.version']}",
 -            // start - boot & selenium conflict, so pin the version we want 
(newest)
 -            'jakarta-servlet-api'         : 
"jakarta.servlet:jakarta.servlet-api:${bomDependencyVersions['jakarta-servlet-api.version']}",
 -            'jakarta-validation-api'      : 
"jakarta.validation:jakarta.validation-api:${bomDependencyVersions['jakarta-validation-api.version']}",
 -            // end - boot & selenium conflict, so pin the version we want 
(newest)
 -            // start - boot & spock conflict, so pin the version we want 
(newest)
 -            'junit-jupiter'               : 
"org.junit.jupiter:junit-jupiter:${bomDependencyVersions['junit.version']}",
 -            'junit-jupiter-api'           : 
"org.junit.jupiter:junit-jupiter-api:${bomDependencyVersions['junit.version']}",
 -            'junit-jupiter-engine'        : 
"org.junit.jupiter:junit-jupiter-engine:${bomDependencyVersions['junit.version']}",
 -            'junit-jupiter-params'        : 
"org.junit.jupiter:junit-jupiter-params:${bomDependencyVersions['junit.version']}",
 -            'junit-platform-commons'      : 
"org.junit.platform:junit-platform-commons:${bomDependencyVersions['junit-platform.version']}",
 -            'junit-platform-engine'       : 
"org.junit.platform:junit-platform-engine:${bomDependencyVersions['junit-platform.version']}",
 -            'junit-platform-launcher'     : 
"org.junit.platform:junit-platform-launcher:${bomDependencyVersions['junit-platform.version']}",
 -            'junit-platform-runner'       : 
"org.junit.platform:junit-platform-runner:${bomDependencyVersions['junit-platform.version']}",
 -            'junit-platform-suite'        : 
"org.junit.platform:junit-platform-suite:${bomDependencyVersions['junit-platform.version']}",
 -            'junit-platform-suite-api'    : 
"org.junit.platform:junit-platform-suite-api:${bomDependencyVersions['junit-platform.version']}",
 -            'junit-platform-suite-commons': 
"org.junit.platform:junit-platform-suite-commons:${bomDependencyVersions['junit-platform.version']}",
 -            'junit-platform-suite-engine' : 
"org.junit.platform:junit-platform-suite-engine:${bomDependencyVersions['junit-platform.version']}",
 -            // end - boot & spock conflict, so pin the version we want 
(newest)
 +            'groovy'                   : 
"org.apache.groovy:groovy:${bomDependencyVersions['groovy.version']}",
 +            'groovy-ant'               : 
"org.apache.groovy:groovy-ant:${bomDependencyVersions['groovy.version']}",
 +            'groovy-astbuilder'        : 
"org.apache.groovy:groovy-astbuilder:${bomDependencyVersions['groovy.version']}",
 +            'groovy-cli-commons'       : 
"org.apache.groovy:groovy-cli-commons:${bomDependencyVersions['groovy.version']}",
 +            'groovy-cli-picocli'       : 
"org.apache.groovy:groovy-cli-picocli:${bomDependencyVersions['groovy.version']}",
 +            'groovy-console'           : 
"org.apache.groovy:groovy-console:${bomDependencyVersions['groovy.version']}",
 +            'groovy-contracts'         : 
"org.apache.groovy:groovy-contracts:${bomDependencyVersions['groovy.version']}",
 +            'groovy-datetime'          : 
"org.apache.groovy:groovy-datetime:${bomDependencyVersions['groovy.version']}",
 +            'groovy-dateutil'          : 
"org.apache.groovy:groovy-dateutil:${bomDependencyVersions['groovy.version']}",
 +            'groovy-docgenerator'      : 
"org.apache.groovy:groovy-docgenerator:${bomDependencyVersions['groovy.version']}",
 +            'groovy-ginq'              : 
"org.apache.groovy:groovy-ginq:${bomDependencyVersions['groovy.version']}",
 +            'groovy-groovydoc'         : 
"org.apache.groovy:groovy-groovydoc:${bomDependencyVersions['groovy.version']}",
 +            'groovy-groovysh'          : 
"org.apache.groovy:groovy-groovysh:${bomDependencyVersions['groovy.version']}",
 +            'groovy-jmx'               : 
"org.apache.groovy:groovy-jmx:${bomDependencyVersions['groovy.version']}",
 +            'groovy-json'              : 
"org.apache.groovy:groovy-json:${bomDependencyVersions['groovy.version']}",
 +            'groovy-jsr223'            : 
"org.apache.groovy:groovy-jsr223:${bomDependencyVersions['groovy.version']}",
 +            'groovy-macro'             : 
"org.apache.groovy:groovy-macro:${bomDependencyVersions['groovy.version']}",
 +            'groovy-macro-library'     : 
"org.apache.groovy:groovy-macro-library:${bomDependencyVersions['groovy.version']}",
 +            'groovy-nio'               : 
"org.apache.groovy:groovy-nio:${bomDependencyVersions['groovy.version']}",
 +            'groovy-servlet'           : 
"org.apache.groovy:groovy-servlet:${bomDependencyVersions['groovy.version']}",
 +            'groovy-sql'               : 
"org.apache.groovy:groovy-sql:${bomDependencyVersions['groovy.version']}",
 +            'groovy-swing'             : 
"org.apache.groovy:groovy-swing:${bomDependencyVersions['groovy.version']}",
 +            'groovy-templates'         : 
"org.apache.groovy:groovy-templates:${bomDependencyVersions['groovy.version']}",
 +            'groovy-test'              : 
"org.apache.groovy:groovy-test:${bomDependencyVersions['groovy.version']}",
 +            'groovy-test-junit5'       : 
"org.apache.groovy:groovy-test-junit5:${bomDependencyVersions['groovy.version']}",
 +            'groovy-testng'            : 
"org.apache.groovy:groovy-testng:${bomDependencyVersions['groovy.version']}",
 +            'groovy-toml'              : 
"org.apache.groovy:groovy-toml:${bomDependencyVersions['groovy.version']}",
 +            'groovy-typecheckers'      : 
"org.apache.groovy:groovy-typecheckers:${bomDependencyVersions['groovy.version']}",
 +            'groovy-xml'               : 
"org.apache.groovy:groovy-xml:${bomDependencyVersions['groovy.version']}",
 +            'groovy-yaml'              : 
"org.apache.groovy:groovy-yaml:${bomDependencyVersions['groovy.version']}",
              'hibernate-groovy-proxy'      : 
"org.yakworks:hibernate-groovy-proxy:${bomDependencyVersions['hibernate-groovy-proxy.version']}",
 -            'mongodb-bson'                : 
"org.mongodb:bson:${bomDependencyVersions['mongodb.version']}",
 -            'mongodb-driver-core'         : 
"org.mongodb:mongodb-driver-core:${bomDependencyVersions['mongodb.version']}",
 -            'mongodb-driver-sync'         : 
"org.mongodb:mongodb-driver-sync:${bomDependencyVersions['mongodb.version']}",
 -            'mongodb-record-codec'        : 
"org.mongodb:bson-record-codec:${bomDependencyVersions['mongodb.version']}",
 -            // start - pin opentelemetry to prevent bom conflicts
 -            'opentelemetry-api'                              : 
"io.opentelemetry:opentelemetry-api:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-context'                          : 
"io.opentelemetry:opentelemetry-context:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-exporter-logging'                 : 
"io.opentelemetry:opentelemetry-exporter-logging:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-sdk'                              : 
"io.opentelemetry:opentelemetry-sdk:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-sdk-common'                       : 
"io.opentelemetry:opentelemetry-sdk-common:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-sdk-trace'                        : 
"io.opentelemetry:opentelemetry-sdk-trace:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-sdk-metrics'                      : 
"io.opentelemetry:opentelemetry-sdk-metrics:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-sdk-logs'                         : 
"io.opentelemetry:opentelemetry-sdk-logs:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-sdk-extension-autoconfigure-spi'  : 
"io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:${bomDependencyVersions['opentelemetry.version']}",
 -            'opentelemetry-sdk-extension-autoconfigure'      : 
"io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:${bomDependencyVersions['opentelemetry.version']}",
 -            // end - pin opentelemetry to prevent bom conflicts
 -            'rxjava'                      : 
"io.reactivex:rxjava:${bomDependencyVersions['rxjava.version']}",
 -            'rxjava2'                     : 
"io.reactivex.rxjava2:rxjava:${bomDependencyVersions['rxjava2.version']}",
 -            'rxjava3'                     : 
"io.reactivex.rxjava3:rxjava:${bomDependencyVersions['rxjava3.version']}",
 -            'sitemesh'                    : 
"opensymphony:sitemesh:${bomDependencyVersions['sitemesh.version']}",
 -            'starter-sitemesh'            : 
"org.sitemesh:spring-boot-starter-sitemesh:${bomDependencyVersions['starter-sitemesh.version']}",
 -            'spring-webmvc-sitemesh'      : 
"org.sitemesh:spring-webmvc-sitemesh:${bomDependencyVersions['spring-webmvc-sitemesh.version']}",
 +            'jakarta-servlet-api'         : 
"jakarta.servlet:jakarta.servlet-api:${bomDependencyVersions['jakarta-servlet-api.version']}",
 +            'jakarta-validation'      : 
"jakarta.validation:jakarta.validation-api:${bomDependencyVersions['jakarta-validation.version']}",
 +            'jquery'                   : 
"org.webjars.npm:jquery:${bomDependencyVersions['jquery.version']}",
 +            'junit-jupiter'               : 
"org.junit.jupiter:junit-jupiter:${bomDependencyVersions['junit.version']}", // 
boot & spock conflict
 +            'junit-jupiter-api'           : 
"org.junit.jupiter:junit-jupiter-api:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-jupiter-engine'        : 
"org.junit.jupiter:junit-jupiter-engine:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-jupiter-params'        : 
"org.junit.jupiter:junit-jupiter-params:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-commons'      : 
"org.junit.platform:junit-platform-commons:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-engine'       : 
"org.junit.platform:junit-platform-engine:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-launcher'     : 
"org.junit.platform:junit-platform-launcher:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-runner'       : 
"org.junit.platform:junit-platform-runner:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-suite'        : 
"org.junit.platform:junit-platform-suite:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-suite-api'    : 
"org.junit.platform:junit-platform-suite-api:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-suite-commons': 
"org.junit.platform:junit-platform-suite-commons:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'junit-platform-suite-engine' : 
"org.junit.platform:junit-platform-suite-engine:${bomDependencyVersions['junit.version']}",
 // boot & spock conflict
 +            'mongodb-bson'             : 
"org.mongodb:bson:${bomDependencyVersions['mongodb.version']}",
 +            'mongodb-driver-core'      : 
"org.mongodb:mongodb-driver-core:${bomDependencyVersions['mongodb.version']}",
 +            'mongodb-driver-sync'      : 
"org.mongodb:mongodb-driver-sync:${bomDependencyVersions['mongodb.version']}",
 +            'mongodb-record-codec'     : 
"org.mongodb:bson-record-codec:${bomDependencyVersions['mongodb.version']}",
 +            'rxjava'                   : 
"io.reactivex:rxjava:${bomDependencyVersions['rxjava.version']}",
 +            'rxjava2'                  : 
"io.reactivex.rxjava2:rxjava:${bomDependencyVersions['rxjava2.version']}",
 +            'rxjava3'                  : 
"io.reactivex.rxjava3:rxjava:${bomDependencyVersions['rxjava3.version']}",
 +            'sitemesh'                 : 
"opensymphony:sitemesh:${bomDependencyVersions['sitemesh.version']}",
 +            'spock-core'               : 
"org.spockframework:spock-core:${bomDependencyVersions['spock.version']}",
 +            'spock-spring'             : 
"org.spockframework:spock-spring:${bomDependencyVersions['spock.version']}",
 +            'spring-retry'             : 
"org.springframework.retry:spring-retry:${bomDependencyVersions['spring-retry.version']}",
 +            'starter-sitemesh'         : 
"org.sitemesh:spring-boot-starter-sitemesh:${bomDependencyVersions['starter-sitemesh.version']}",
++            'spring-webmvc-sitemesh'   : 
"org.sitemesh:spring-webmvc-sitemesh:${bomDependencyVersions['spring-webmvc-sitemesh.version']}",
      ]
  
      // Because pom exclusions aren't properly supported by gradle, we can't 
inherit the grails-gradle-bom
diff --cc gradle.properties
index 3f7bf4ca9a,5a6abc98ec..547692b327
--- a/gradle.properties
+++ b/gradle.properties
@@@ -50,15 -50,13 +50,17 @@@ yakworksHibernateGroovyProxyVersion=1.
  # Build dependency versions not managed by BOMs
  apacheRatVersion=0.8.1
  gradleChecksumPluginVersion=1.4.0
 -# note: the cyclonedx 3 requires Gradle 9
 -gradleCycloneDxPluginVersion=2.4.1
 +gradleCycloneDxPluginVersion=3.0.0
  
  # micronaut libraries not in the bom due to the potential for spring 
mismatches
 -# Note: we cannot update to 4.10.x due to netty 4.2 being used (incompatible 
with spring boot 3.5.x)
 -micronautPlatformVersion=4.9.4
 +micronautPlatformVersion=5.0.0-M2
+ micronautRxjava2Version=2.9.0
++micronautSerdeJacksonVersion=2.11.0
 +
 +# Pass -PskipMicronautProjects (presence-based, like skipFunctionalTests / 
skipCodeStyle)
 +# to drop the Grails-Micronaut "island" (grails-micronaut, 
grails-micronaut-bom, and
 +# the micronaut-tied test-examples) from the build graph. See settings.gradle 
for the
 +# gating logic and grails-core#15613 for the rationale.
  
  # Libraries only specific to test apps, these should not be exposed
  ersatzVersion=4.0.1
diff --cc grails-doc/src/en/guide/toc.yml
index 75f0009fef,d7a6cd0bb1..5f8d5504a6
--- a/grails-doc/src/en/guide/toc.yml
+++ b/grails-doc/src/en/guide/toc.yml
@@@ -36,7 -36,7 +36,8 @@@ gettingStarted
    developmentReloading: Development Reloading
  upgrading:
    title: Upgrading from the previous versions
 +  upgrading80x: Upgrading from Grails 7 to Grails 8
+   upgrading72x: Upgrading from Grails 7.1 to Grails 7.2
    upgrading71x: Upgrading from Grails 7.0 to Grails 7.1
    upgrading70x: Upgrading from Grails 6 to Grails 7.0
    upgrading60x: Upgrading from Grails 5 to Grails 6
diff --cc 
grails-gsp/spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java
index f75d3a22fb,422d796c68..79ec59002f
--- 
a/grails-gsp/spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java
+++ 
b/grails-gsp/spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java
@@@ -39,10 -37,9 +37,9 @@@ import org.springframework.beans.factor
  import org.springframework.beans.factory.support.GenericBeanDefinition;
  import org.springframework.beans.factory.support.ManagedList;
  import org.springframework.boot.autoconfigure.AutoConfigureAfter;
- import org.springframework.boot.autoconfigure.AutoConfigureBefore;
  import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
  import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 -import 
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
 +import org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration;
  import org.springframework.context.EnvironmentAware;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
diff --cc settings.gradle
index 2cc1ba3650,b5669c29e4..969f1c7f65
--- a/settings.gradle
+++ b/settings.gradle
@@@ -405,15 -419,21 +434,17 @@@ include
          'grails-test-examples-geb-gebconfig',
          'grails-test-examples-gorm',
          'grails-test-examples-gsp-layout',
 -        'grails-test-examples-gsp-sitemesh3',
 -        'grails-test-examples-gsp-spring-boot',
 +        // TODO: 'grails-test-examples-gsp-sitemesh3',
 +        // TODO: 'grails-test-examples-gsp-spring-boot',
          'grails-test-examples-hyphenated',
          'grails-test-examples-issue-11102',
 -        'grails-test-examples-issue-11767',
          'grails-test-examples-issue-15228',
+         'grails-test-examples-issue-10279',
          'grails-test-examples-issue-698-domain-save-npe',
          'grails-test-examples-issue-views-182',
+         'grails-test-examples-jetty',
 -        'grails-test-examples-micronaut',
 -        'grails-test-examples-micronaut-groovy-only',
          'grails-test-examples-namespaces',
          'grails-test-examples-plugins-exploded',
 -        'grails-test-examples-plugins-issue-11767',
          'grails-test-examples-plugins-issue11005',
          'grails-test-examples-plugins-loadafter',
          'grails-test-examples-plugins-loadfirst',
@@@ -452,8 -475,12 +483,9 @@@ project(':grails-test-examples-plugins-
  project(':grails-test-examples-plugins-loadsecond').projectDir = 
file('grails-test-examples/plugins/loadsecond')
  project(':grails-test-examples-plugins-loadafter').projectDir = 
file('grails-test-examples/plugins/loadafter')
  project(':grails-test-examples-plugins-issue11005').projectDir = 
file('grails-test-examples/plugins/issue11005')
 -project(':grails-test-examples-issue-11767').projectDir = 
file('grails-test-examples/issue-11767')
  project(':grails-test-examples-issue-15228').projectDir = 
file('grails-test-examples/issue-15228')
+ project(':grails-test-examples-issue-10279').projectDir = 
file('grails-test-examples/issue-10279')
  project(':grails-test-examples-plugins-exploded').projectDir = 
file('grails-test-examples/plugins/exploded')
 -project(':grails-test-examples-plugins-issue-11767').projectDir = 
file('grails-test-examples/plugins/issue-11767')
 -project(':grails-test-examples-plugins-micronaut-singleton').projectDir = 
file('grails-test-examples/plugins/micronaut-singleton')
  project(':grails-test-examples-cache').projectDir = 
file('grails-test-examples/cache')
  project(':grails-test-examples-config-report').projectDir = 
file('grails-test-examples/config-report')
  project(':grails-test-examples-scaffolding').projectDir = 
file('grails-test-examples/scaffolding')

Reply via email to