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

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

commit fb217b99bac2bb9e2f987a44f0176f9508028c43
Merge: f1a881e9be cee6619f4a
Author: James Fredley <[email protected]>
AuthorDate: Fri Mar 20 15:33:20 2026 -0400

    Merge remote-tracking branch 'origin/8.0.x' into spring-boot-4
    
    # Conflicts:
    #       dependencies.gradle
    #       
grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
    #       
grails-data-mongodb/boot-plugin/src/test/groovy/org/grails/datastore/gorm/mongodb/boot/autoconfigure/MongoDbGormAutoConfigurationSpec.groovy
    #       
grails-data-mongodb/boot-plugin/src/test/groovy/org/grails/datastore/gorm/mongodb/boot/autoconfigure/MongoDbGormAutoConfigureWithGeoSpacialSpec.groovy

 .agents/skills/grails-developer/SKILL.md           |  885 +++++++++++++++
 .agents/skills/groovy-developer/SKILL.md           |  521 +++++++++
 .agents/skills/java-developer/SKILL.md             |  286 +++++
 .claude/skills/grails-developer/SKILL.md           |    1 +
 .claude/skills/groovy-developer/SKILL.md           |    1 +
 .claude/skills/java-developer/SKILL.md             |    1 +
 .clinerules                                        |    1 +
 .cursorrules                                       |    1 +
 .github/workflows/codeql.yml                       |    4 +-
 .github/workflows/codestyle.yml                    |   69 +-
 .github/workflows/forge-deploy-next.yml            |   12 +-
 .github/workflows/forge-deploy-prev-snapshot.yml   |   12 +-
 .github/workflows/forge-deploy-prev.yml            |   12 +-
 .github/workflows/forge-deploy-release.yml         |   12 +-
 .github/workflows/forge-deploy-snapshot.yml        |   12 +-
 .github/workflows/gradle.yml                       |  168 ++-
 .github/workflows/groovy-joint-workflow.yml        |   21 +-
 .github/workflows/rat.yml                          |    8 +-
 .github/workflows/release-close.yml                |   96 ++
 .github/workflows/release-notes.yml                |   10 +-
 .github/workflows/release-publish-docs.yml         |   79 ++
 .github/workflows/release.yml                      |   51 +-
 .idea/codeStyles/Project.xml                       |    6 +
 .mailmap                                           |  933 ----------------
 .sdkmanrc                                          |    7 +-
 .windsurfrules                                     |    1 +
 AGENTS.md                                          |  268 +++++
 CLAUDE.md                                          |    1 +
 GEMINI.md                                          |    1 +
 INSTALL                                            |    4 +
 README.md                                          |    2 +-
 RELEASE.md                                         |    2 +-
 build-logic/docs-core/build.gradle                 |    8 +-
 .../gradle/tasks/bom/CoordinateHolder.groovy       |    2 +-
 .../tasks/bom/CoordinateVersionHolder.groovy       |   10 +
 .../tasks/bom/ExtractDependenciesTask.groovy       |   24 +-
 .../gradle/tasks/bom/PropertyNameCalculator.groovy |   28 +-
 .../gradle/wrapper/gradle-wrapper.properties       |    4 +-
 build-logic/plugins/build.gradle                   |   16 +
 .../buildsrc/GrailsCodeStyleExtension.groovy       |   62 ++
 .../grails/buildsrc/GrailsCodeStylePlugin.groovy   |  190 ++++
 .../grails/buildsrc/GrailsGroovydocPlugin.groovy   |   54 +
 .../buildsrc/GrailsRepoSettingsPlugin.groovy       |  113 ++
 .../buildsrc/GroovydocEnhancerExtension.groovy     |  108 ++
 .../grails/buildsrc/GroovydocEnhancerPlugin.groovy |  180 +++
 .../org/apache/grails/buildsrc/SbomPlugin.groovy   |    8 +
 .../checkstyle/checkstyle-suppressions.xml         |    0
 .../checkstyle/checkstyle.xml                      |    0
 .../codenarc/codenarc.groovy                       |    0
 build-logic/settings.gradle                        |   19 +-
 build.gradle                                       |   38 +-
 buildSrc/build.gradle                              |    2 +-
 buildSrc/settings.gradle                           |   73 +-
 dependencies.gradle                                |   43 +-
 etc/bin/Dockerfile                                 |    3 +-
 etc/bin/test-reproducible-builds.sh                |    5 +
 etc/bin/verify.sh                                  |   49 +-
 gradle.properties                                  |    8 +-
 gradle/code-style-config.gradle                    |   69 --
 gradle/docs-dependencies.gradle                    |   58 +-
 gradle/functional-test-config.gradle               |    1 +
 gradle/grails-data-tck-config.gradle               |    4 +-
 gradle/grails-extension-gradle-config.gradle       |    7 +
 gradle/publish-root-config.gradle                  |    3 +
 gradle/test-config.gradle                          |   23 +-
 gradle/wrapper/gradle-wrapper.properties           |    4 +-
 grails-async/core/build.gradle                     |    2 +-
 grails-async/gpars/build.gradle                    |    2 +-
 grails-async/plugin/build.gradle                   |    2 +-
 grails-async/rxjava/build.gradle                   |    2 +-
 grails-async/rxjava2/build.gradle                  |    2 +-
 grails-async/rxjava3/build.gradle                  |    2 +-
 grails-bom/build.gradle                            |   58 +-
 grails-bootstrap/build.gradle                      |    2 +-
 .../codegen/model/AbstractMemberDefinition.groovy  |  225 ++++
 .../codegen/model/DomainFieldModifier.groovy       |  391 +++++++
 .../grails/codegen/model/FieldDefinition.groovy    |  156 +++
 .../grails/codegen/model/PropertyDefinition.groovy |  119 ++
 .../codegen/model/DomainFieldModifierSpec.groovy   |  502 +++++++++
 .../codegen/model/FieldDefinitionSpec.groovy       |  162 +++
 .../codegen/model/PropertyDefinitionSpec.groovy    |  364 ++++++
 grails-cache/build.gradle                          |    2 +-
 grails-codecs-core/build.gradle                    |    2 +-
 grails-codecs/build.gradle                         |    2 +-
 grails-common/build.gradle                         |    2 +-
 grails-console/build.gradle                        |    3 +-
 .../GrailsApplicationContextCommandRunner.groovy   |   34 +-
 .../ui/script/GrailsApplicationScriptRunner.groovy |    9 +-
 ...railsApplicationContextCommandRunnerSpec.groovy |  136 +++
 .../GrailsApplicationScriptRunnerSpec.groovy       |   54 +
 grails-controllers/build.gradle                    |    2 +-
 grails-converters/build.gradle                     |    2 +-
 .../src/main/groovy/grails/web/JSONBuilder.groovy  |    2 +-
 grails-core/build.gradle                           |    2 +-
 .../main/groovy/grails/core/GrailsApplication.java |    6 +-
 .../grails/dev/commands/ApplicationCommand.groovy  |   41 +-
 grails-core/src/main/groovy/grails/util/Mixin.java |    2 +-
 .../groovy/grails/util/MixinTargetAware.groovy     |    2 +-
 .../grails/validation/ConstraintsEvaluator.java    |    2 +-
 .../injection/ApplicationClassInjector.groovy      |   46 +-
 .../injection/ArtefactTypeAstTransformation.java   |    2 +-
 .../compiler/injection/MixinTransformation.java    |    2 +-
 .../grails/boot/DevelopmentModeWatchSpec.groovy    |    4 +-
 ...aceHolderConfigurerCorePluginRuntimeSpec.groovy |    2 +
 .../injection/ApplicationClassInjectorSpec.groovy  |  100 ++
 .../compiler/injection/GrailsASTUtilsTests.groovy  |    9 +-
 .../injection/GrailsArtefactTransformerSpec.groovy |    6 +-
 .../config/NavigableMapSpringProfilesSpec.groovy   |    2 +
 .../config/YamlPropertySourceLoaderSpec.groovy     |    8 +-
 .../org/grails/plugins/GrailsPluginTests.groovy    |    9 +-
 grails-core/src/test/resources/application.yml     |    4 +-
 .../src/test/resources/foo-plugin-environments.yml |    4 +-
 grails-data-docs/stage/build.gradle                |   10 +-
 .../grails-app/conf/application.yml                |    8 +-
 .../groovy/myapp/BarIntegrationSpec.groovy         |    3 +-
 .../groovy/myapp/FooIntegrationSpec.groovy         |    3 +-
 grails-data-graphql/gradle.properties              |    2 +-
 grails-data-graphql/settings.gradle                |    2 +-
 grails-data-hibernate5/boot-plugin/build.gradle    |    2 +-
 grails-data-hibernate5/core/build.gradle           |    2 +-
 .../grails/orm/HibernateCriteriaBuilder.java       |   27 +
 .../AbstractHibernateGormStaticApi.groovy          |    2 +-
 .../grails/orm/hibernate/cfg/PropertyConfig.groovy |    5 +-
 .../query/AbstractHibernateCriteriaBuilder.java    |  102 +-
 .../hibernate/query/AbstractHibernateQuery.java    |  105 +-
 .../mapping/HibernateMappingBuilderTests.groovy    |   13 +-
 .../gorm/tests/BasicCollectionInQuerySpec.groovy   |  167 +++
 .../gorm/tests/DetachedCriteriaJoinSpec.groovy     |  124 ++-
 ...hedCriteriaProjectionNullAssociationSpec.groovy |  136 +++
 .../grails/gorm/tests/WhereQueryBugFixSpec.groovy  |  106 ++
 .../WhereQueryOldIssueVerificationSpec.groovy      |  371 +++++++
 .../tests/compositeid/CompositeIdCriteria.groovy   |   80 ++
 .../MultiTenancyBidirectionalManyToManySpec.groovy |    2 +
 .../core/GrailsDataHibernate5TckManager.groovy     |   91 +-
 .../orm/hibernate/ExistsCrossJoinSpec.groovy       |  122 ++
 .../DataServiceDatasourceInheritanceSpec.groovy    |  239 ++++
 .../DataServiceMultiDataSourceSpec.groovy          |  460 ++++++++
 ...ataServiceMultiTenantMultiDataSourceSpec.groovy |  287 +++++
 .../MultipleDataSourceConnectionsSpec.groovy       |   72 +-
 .../connections/SchemaMultiTenantSpec.groovy       |    3 +
 .../hibernate/connections/SingleTenantSpec.groovy  |    3 +
 .../WhereQueryMultiDataSourceSpec.groovy           |  179 +++
 grails-data-hibernate5/dbmigration/README.md       |   26 +-
 grails-data-hibernate5/dbmigration/build.gradle    |   20 +-
 grails-data-hibernate5/docs/build.gradle           |   26 +-
 .../asciidoc/gettingStarted/outsideGrails.adoc     |    2 +-
 .../multipleDataSources/dataSourceNamespaces.adoc  |    2 +
 .../docs/asciidoc/multipleDataSources/index.adoc   |    4 +
 .../docs/src/docs/asciidoc/services/index.adoc     |    5 +
 .../asciidoc/services/multipleDataSources.adoc     |  262 +++++
 grails-data-hibernate5/grails-plugin/build.gradle  |    3 +-
 .../GrailsOpenSessionInViewInterceptor.java        |  137 ++-
 .../support/MultiDataSourceSessionSpec.groovy      |  193 ++++
 grails-data-mongodb/boot-plugin/build.gradle       |    2 +-
 .../MongoDbGormAutoConfigurationSpec.groovy        |    1 +
 ...ngoDbGormAutoConfigureWithGeoSpacialSpec.groovy |    1 +
 .../src/test/resources/docker-java.properties      |    2 +
 grails-data-mongodb/bson/build.gradle              |    2 +-
 grails-data-mongodb/core/build.gradle              |    2 +-
 .../main/groovy/grails/mongodb/MongoEntity.groovy  |    2 +-
 .../mongodb/api/MongoInstanceOperations.groovy     |    5 +-
 .../datastore/gorm/mongo/api/MongoStaticApi.groovy |    2 +-
 .../MongoDbDataStoreSpringInitializerSpec.groovy   |   24 +-
 .../mongo/core/GrailsDataMongoTckManager.groovy    |   81 ++
 .../connections/MongoConnectionSourcesSpec.groovy  |    7 +
 .../gorm/mongo/connections/MultiTenancySpec.groovy |    5 +-
 .../connections/SchemaBasedMultiTenancySpec.groovy |    5 +-
 .../mongo/connections/SingleTenancySpec.groovy     |    5 +-
 .../MongoStaticApiMultiTenancySpec.groovy          |    5 +-
 grails-data-mongodb/docs/build.gradle              |   26 +-
 grails-data-mongodb/ext/build.gradle               |    2 +-
 grails-data-mongodb/grails-plugin/build.gradle     |    2 +-
 grails-data-mongodb/gson-templates/build.gradle    |    2 +-
 .../Neo4jAutoConfigurationSpec.groovy              |    2 +
 grails-data-neo4j/docs/build.gradle                |   17 +
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 grails-data-neo4j/gradle.properties                |    2 +-
 .../tests/multitenancy/MultiTenancySpec.groovy     |    4 +
 .../tests/multitenancy/SingleTenancySpec.groovy    |    2 +
 grails-data-neo4j/settings.gradle                  |    4 +-
 grails-data-simple/build.gradle                    |    2 +-
 grails-databinding-core/build.gradle               |    2 +-
 grails-databinding/build.gradle                    |    2 +-
 grails-datamapping-async/build.gradle              |    2 +-
 .../database/DatabasePerTenantSpec.groovy          |    3 +-
 .../MultiTenantServiceTransformSpec.groovy         |    2 +
 .../partitioned/PartitionMultiTenancySpec.groovy   |    3 +-
 .../multitenancy/schema/SchemaPerTenantSpec.groovy |    6 +-
 .../gorm/tests/CurrentTenantTransformSpec.groovy   |    6 +-
 .../gorm/tests/DeepValidateWithSaveSpec.groovy     |   46 +-
 .../gorm/tests/MultipleDataSourceSpec.groovy       |   67 +-
 .../grails/gorm/tests/TenantServiceSpec.groovy     |    7 +-
 .../grails/gorm/tests/WhereMethodSpec.groovy       |  151 +++
 .../gorm/SaveWithFailOnErrorDefaultSpec.groovy     |   50 +-
 grails-datamapping-core/build.gradle               |    3 +-
 .../groovy/grails/gorm/DetachedCriteria.groovy     |   22 +-
 .../org/grails/datastore/gorm/GormEnhancer.groovy  |   30 +-
 .../org/grails/datastore/gorm/GormEntity.groovy    |    4 +-
 .../datastore/gorm/finders/CountByFinder.java      |    1 +
 .../datastore/gorm/jdbc/DataSourceBuilder.java     |   64 +-
 .../jdbc/connections/DataSourceSettings.groovy     |    2 +-
 .../datastore/gorm/query/NamedCriteriaProxy.groovy |    2 +-
 .../gorm/query/NamedQueriesBuilder.groovy          |    2 +
 .../query/criteria/AbstractDetachedCriteria.groovy |    4 +
 .../transform/DetachedCriteriaTransformer.java     |   99 +-
 ...stractDetachedCriteriaServiceImplementor.groovy |   13 +-
 .../implementers/AbstractSaveImplementer.groovy    |    6 +-
 .../implementers/AbstractWhereImplementer.groovy   |    8 +-
 .../services/implementers/DeleteImplementer.groovy |   11 +-
 .../implementers/FindAndDeleteImplementer.groovy   |   32 +-
 .../services/implementers/SaveImplementer.groovy   |   19 +-
 .../implementers/UpdateOneImplementer.groovy       |    2 +-
 .../transform/ServiceTransformation.groovy         |  187 +++-
 .../CompileStaticServiceInjectionSpec.groovy       |  356 ++++++
 .../ConnectionRoutingServiceTransformSpec.groovy   |  596 ++++++++++
 .../services/WhereConnectionRoutingSpec.groovy     |  211 ++++
 .../gorm/GormEnhancerAllQualifiersSpec.groovy      |  236 ++++
 .../gorm/jdbc/DataSourceBuilderSpec.groovy         |  927 ++++++++++++++++
 .../criteria/DetachedCriteriaCloneSpec.groovy      |  123 ++
 grails-datamapping-rx/build.gradle                 |    2 +-
 grails-datamapping-support/build.gradle            |    2 +-
 grails-datamapping-tck/build.gradle                |    2 +-
 .../testing/tck/base/GrailsDataTckManager.groovy   |   32 +
 .../tck/domains/DataServiceRoutingMetric.groovy    |   42 +
 .../domains/DataServiceRoutingMetricService.groovy |   39 +
 .../tck/domains/DataServiceRoutingProduct.groovy   |   40 +
 .../DataServiceRoutingProductDataService.groovy    |   41 +
 .../DataServiceRoutingProductService.groovy        |   43 +
 .../testing/tck/domains/WhereRoutingItem.groovy    |   43 +
 .../tck/domains/WhereRoutingItemService.groovy     |   37 +
 .../tck/tests/CrossLayerMultiDataSourceSpec.groovy |  148 +++
 ...CrossLayerMultiTenantMultiDataSourceSpec.groovy |  132 +++
 .../tests/DataServiceConnectionRoutingSpec.groovy  |  288 +++++
 ...aServiceMultiTenantConnectionRoutingSpec.groovy |  153 +++
 .../tck/tests/DomainMultiDataSourceSpec.groovy     |  180 +++
 .../DomainMultiTenantMultiDataSourceSpec.groovy    |  168 +++
 .../tests/WhereQueryConnectionRoutingSpec.groovy   |  136 +++
 grails-datamapping-validation/build.gradle         |    2 +-
 .../grails/gorm/validation/Constrained.groovy      |   10 +-
 .../validation/DefaultConstrainedProperty.groovy   |   51 +-
 .../grails/gorm/validation/DisplayType.groovy      |   81 ++
 .../grails/gorm/validation/DisplayTypeSpec.groovy  |  151 +++
 grails-datasource/build.gradle                     |    2 +-
 grails-datastore-async/build.gradle                |    2 +-
 grails-datastore-core/build.gradle                 |    2 +-
 ...atastoreServiceMethodInvokingFactoryBean.groovy |  102 +-
 .../grails/datastore/mapping/config/Entity.groovy  |    8 +-
 .../datastore/mapping/core/AbstractSession.java    |    2 +-
 .../dirty/checking/DirtyCheckingSupport.groovy     |    2 +-
 .../mapping/query/jpa/JpaQueryBuilder.java         |   53 +
 ...toreServiceMethodInvokingFactoryBeanSpec.groovy |  174 +++
 grails-datastore-web/build.gradle                  |    2 +-
 grails-doc/build.gradle                            |   14 +-
 grails-doc/src/en/guide/GORM/quickStartGuide.adoc  |    4 +-
 .../en/guide/GORM/quickStartGuide/basicCRUD.adoc   |   16 +-
 grails-doc/src/en/guide/REST/domainResources.adoc  |   15 +
 grails-doc/src/en/guide/REST/hypermedia/hal.adoc   |   13 +
 .../src/en/guide/REST/versioningResources.adoc     |   13 +
 .../{contributing.adoc => bestPractices.adoc}      |    2 +-
 .../en/guide/bestPractices/codeAnalysisGroovy.adoc |  159 +++
 .../guide/cache/cacheUsage/cacheConfiguration.adoc |    2 +-
 grails-doc/src/en/guide/commandLine.adoc           |    2 +-
 .../guide/commandLine/creatingCustomCommands.adoc  |    2 +-
 .../dataSource/automaticDatabaseMigration.adoc     |   15 +-
 .../guide/conf/dataSource/multipleDatasources.adoc |  302 ++++-
 grails-doc/src/en/guide/conf/docengine.adoc        |   23 +-
 grails-doc/src/en/guide/conf/environments.adoc     |   33 +-
 grails-doc/src/en/guide/contributing.adoc          |    2 +-
 grails-doc/src/en/guide/index.adoc                 |    6 +-
 .../guide/plugins/artefactApi/customArtefacts.adoc |    2 +-
 .../src/en/guide/profiles/pluginProfile.adoc       |    2 +-
 .../src/en/guide/profiles/profileProfile.adoc      |    2 +-
 .../en/guide/profiles/restAPIPluginProfile.adoc    |    2 +-
 .../src/en/guide/profiles/restAPIProfile.adoc      |    2 +-
 .../src/en/guide/profiles/webPluginProfile.adoc    |    2 +-
 grails-doc/src/en/guide/profiles/webProfile.adoc   |    2 +-
 grails-doc/src/en/guide/reference.adoc             |    4 +-
 grails-doc/src/en/guide/security/codecs.adoc       |   10 +
 .../src/en/guide/security/xssPrevention.adoc       |   34 +
 .../transactionsMultiDataSource.adoc               |    4 +
 .../spring/propertyPlaceholderConfiguration.adoc   |    9 +
 .../src/en/guide/testing/integrationTesting.adoc   |  179 +++
 .../en/guide/theWebLayer/contentNegotiation.adoc   |   42 +
 .../guide/theWebLayer/controllers/dataBinding.adoc |   56 +-
 .../gsp/GSPBasics/variablesAndScopes.adoc          |    8 +-
 .../gsp/taglibs/taglibVariablesAndScopes.adoc      |    8 +-
 .../interceptors/interceptorOrdering.adoc          |    9 +
 .../urlmappings/customizingUrlFormat.adoc          |   11 +
 grails-doc/src/en/guide/toc.yml                    |    3 +
 .../src/en/guide/upgrading/upgrading60x.adoc       |  124 ++-
 grails-doc/src/en/ref/Constraints.adoc             |   51 +-
 grails-doc/src/en/ref/Constraints/nullable.adoc    |   14 +
 grails-doc/src/en/ref/Controllers/withFormat.adoc  |   16 +
 .../src/en/ref/Database Mapping/insertable.adoc    |    4 +-
 .../{updateable.adoc => updatable.adoc}            |   10 +-
 grails-doc/src/en/ref/Domain Classes/save.adoc     |   14 +
 grails-doc/src/en/ref/Plug-ins/dataSource.adoc     |   13 +
 .../src/en/ref/Servlet API/servletContext.adoc     |    2 +-
 .../src/en/ref/Tag Libraries/actionName.adoc       |   13 +-
 .../src/en/ref/Tag Libraries/controllerName.adoc   |   14 +-
 grails-doc/src/en/ref/Tag Libraries/flash.adoc     |   11 +-
 grails-doc/src/en/ref/Tag Libraries/pageScope.adoc |    5 +-
 grails-doc/src/en/ref/Tag Libraries/params.adoc    |   26 +-
 grails-doc/src/en/ref/Tag Libraries/request.adoc   |   16 +-
 grails-doc/src/en/ref/Tag Libraries/response.adoc  |   13 +-
 .../src/en/ref/Tag Libraries/servletContext.adoc   |   20 +-
 grails-doc/src/en/ref/Tag Libraries/session.adoc   |   27 +-
 grails-domain-class/build.gradle                   |    2 +-
 .../GrailsDomainClassAutoConfiguration.groovy      |    1 +
 .../domain/support/ConstraintEvaluatorAdapter.java |    1 +
 .../grails/persistence/DomainClassTraitSpec.groovy |    6 +
 grails-encoder/build.gradle                        |    2 +-
 grails-events/compat/build.gradle                  |    2 +-
 .../src/main/groovy/grails/artefact/Service.groovy |    2 +-
 .../src/main/groovy/grails/events/Events.groovy    |    2 +-
 .../compat/src/main/groovy/reactor/bus/Bus.java    |    2 +-
 .../compat/src/main/groovy/reactor/bus/Event.java  |    2 +-
 .../src/main/groovy/reactor/bus/EventBus.groovy    |    2 +-
 .../reactor/bus/registry/Registration.groovy       |    2 +-
 .../reactor/bus/registry/Subscription.groovy       |    2 +-
 .../main/groovy/reactor/bus/selector/Selector.java |    2 +-
 .../src/main/groovy/reactor/fn/Consumer.java       |    2 +-
 .../spring/context/annotation/Consumer.groovy      |    1 +
 .../spring/context/annotation/Selector.groovy      |    1 +
 grails-events/core/build.gradle                    |    2 +-
 grails-events/gpars/build.gradle                   |    2 +-
 grails-events/plugin/build.gradle                  |    2 +-
 grails-events/rxjava/build.gradle                  |    2 +-
 grails-events/rxjava2/build.gradle                 |    2 +-
 grails-events/rxjava3/build.gradle                 |    2 +-
 grails-events/spring/build.gradle                  |    2 +-
 grails-events/transforms/build.gradle              |    2 +-
 grails-fields/build.gradle                         |    2 +-
 .../plugin/formfields/FormFieldsTagLib.groovy      |   33 +-
 .../plugin/formfields/BeanPropertyAccessor.groovy  |    2 +-
 .../formfields/BeanPropertyAccessorImpl.groovy     |    2 +
 .../DelegatingBeanPropertyAccessorImpl.groovy      |    2 +-
 .../plugin/formfields/PropertyPathAccessor.groovy  |    1 +
 .../scaffolding/model/DomainModelService.groovy    |    1 +
 .../model/DomainModelServiceImpl.groovy            |   58 +-
 .../scaffolding/model/property/Constrained.groovy  |   20 +
 .../formfields/DefaultInputRenderingSpec.groovy    |   22 +
 .../model/DomainModelServiceSpec.groovy            |    6 +-
 grails-forge/buildSrc/build.gradle                 |    1 -
 grails-forge/buildSrc/settings.gradle              |   67 +-
 ...uppressions.xml => checkstyle-suppressions.xml} |    0
 grails-forge/config/checkstyle/checkstyle.xml      |    2 +-
 grails-forge/gradle.properties                     |    5 +-
 grails-forge/gradle/code-style-config.gradle       |   42 +-
 grails-forge/gradle/doc-config.gradle              |   30 +-
 grails-forge/gradle/test-config.gradle             |   10 -
 .../gradle/wrapper/gradle-wrapper.properties       |    4 +-
 .../analytics/postgres/AnalyticsController.java    |    8 +-
 .../forge/analytics/postgres/Application.java      |   14 +-
 .../analytics/postgres/FeatureRepository.java      |    4 +-
 .../postgres/StoreGeneratedProjectStatsSpec.groovy |   10 +-
 .../grails/forge/api/ApplicationController.java    |    2 +-
 ...estFramework.java => DevelopmentReloading.java} |   23 +-
 ...meworkDTO.java => DevelopmentReloadingDTO.java} |   64 +-
 .../org/grails/forge/api/SelectOptionsDTO.java     |   28 +-
 .../forge/api/analytics/GenerationListener.java    |    2 +-
 .../forge/api/create/AbstractCreateController.java |    6 +-
 .../api/create/github/GitHubCreateController.java  |   12 +-
 .../api/create/github/GitHubCreateOperation.java   |    6 +-
 .../api/create/github/GitHubCreateService.java     |    6 +-
 .../forge/api/create/zip/ZipCreateController.java  |   22 +-
 .../forge/api/create/zip/ZipCreateOperation.java   |    6 +-
 .../org/grails/forge/api/diff/DiffController.java  |   12 +-
 .../org/grails/forge/api/diff/DiffOperations.java  |    8 +-
 ...java => DevelopmentReloadingSelectOptions.java} |   14 +-
 .../forge/api/preview/PreviewController.java       |   10 +-
 .../forge/api/preview/PreviewOperations.java       |    6 +-
 .../src/main/resources/select_options.properties   |    2 +-
 .../org/grails/forge/api/CreateClient.groovy       |   12 +-
 .../groovy/org/grails/forge/api/DiffClient.groovy  |    8 +-
 .../grails/forge/api/FeatureControllerSpec.groovy  |   22 +-
 .../org/grails/forge/api/PreviewClient.groovy      |    4 +-
 .../forge/api/ZipCreateControllerSpec.groovy       |    4 +-
 grails-forge/grails-forge-cli/build.gradle         |    5 +
 .../java/org/grails/forge/cli/Application.java     |    4 +-
 .../java/org/grails/forge/cli/CodeGenConfig.java   |   19 +-
 .../forge/cli/command/AddPropertyCommand.java      |  181 +++
 .../grails/forge/cli/command/CreateCommand.java    |    8 +-
 ...es.java => DevelopmentReloadingCandidates.java} |    8 +-
 ...ter.java => DevelopmentReloadingConverter.java} |   14 +-
 .../CodeGenConfigDevelopmentReloadingSpec.groovy   |  288 +++++
 .../org/grails/forge/cli/CommandFixture.groovy     |    5 +-
 .../groovy/org/grails/forge/cli/CommandSpec.groovy |    2 +-
 .../java/org/grails/forge/analytics/Generated.java |   10 +-
 .../grails/forge/application/ContextFactory.java   |   10 +-
 .../generator/DefaultProjectGenerator.java         |    2 +-
 .../application/generator/GeneratorContext.java    |   15 +-
 .../build/gradle/DefaultGradleRepository.java      |   59 +-
 .../forge/build/gradle/GradleConfiguration.java    |    6 +-
 .../forge/build/gradle/GradleDependency.java       |   10 +-
 .../forge/build/gradle/GradleRepository.java       |   51 +-
 .../gradle/VersionType.java}                       |    9 +-
 ...st.java => HasDefaultDevelopmentReloading.java} |    6 +-
 .../grails/forge/defaults/LanguageDefaults.java    |   14 +-
 .../java/org/grails/forge/diff/FeatureDiffer.java  |    2 +-
 .../org/grails/forge/feature/FeatureContext.java   |   32 +-
 .../java/org/grails/forge/feature/Features.java    |   12 +-
 .../forge/feature/assetPipeline/AssetPipeline.java |   59 +-
 .../build/gradle/templates/buildGradle.rocker.raw  |    4 +-
 .../templates/gradleWrapperProperties.rocker.raw   |    3 +-
 .../java/org/grails/forge/feature/cli.rocker.raw   |    6 +-
 .../forge/feature/database/TestContainers.java     |   27 +-
 .../GrailsMicronautValidator.java}                 |   18 +-
 .../org/grails/forge/feature/reloading/Jrebel.java |   16 +
 .../forge/feature/reloading/ReloadingFeature.java  |   11 +-
 .../feature/reloading/SpringBootDevTools.java      |   31 +-
 .../feature/spring/SpringBootUndertowFeature.java  |    4 +
 .../feature/spring/SpringBootVirtualThreads.java   |    6 +-
 .../org/grails/forge/feature/test/AssertJ.java     |   68 --
 .../forge/feature/test/GebWithTestcontainers.java  |    8 +-
 .../feature/test/GebWithWebDriverBinaries.java     |    6 +-
 .../org/grails/forge/feature/test/Hamcrest.java    |   68 --
 .../forge/feature/test/HamcrestValidator.java      |   44 -
 .../java/org/grails/forge/feature/test/Junit.java  |   70 --
 .../org/grails/forge/feature/test/Mockito.java     |    2 +-
 .../forge/feature/test/MockitoValidator.java       |    2 +-
 .../java/org/grails/forge/feature/test/Spock.java  |   17 +-
 .../org/grails/forge/feature/test/TestFeature.java |   71 --
 .../feature/test/template/javaJunit.rocker.raw     |   49 -
 .../options/DefaultTestRockerModelProvider.java    |   10 +-
 .../forge/options/DevelopmentReloading.java}       |   27 +-
 .../org/grails/forge/options/FeatureFilter.java    |   12 +-
 .../java/org/grails/forge/options/JdkVersion.java  |    5 +-
 .../java/org/grails/forge/options/Language.java    |    2 +-
 .../java/org/grails/forge/options/Options.java     |   48 +-
 .../org/grails/forge/options/TestFramework.java    |   46 +-
 .../forge/options/TestRockerModelProvider.java     |    9 +-
 .../resources/assets/images/advancedgrails.svg     |    6 +-
 .../assets/images/apple-touch-icon-retina.png      |  Bin 7038 -> 0 bytes
 .../resources/assets/images/apple-touch-icon.png   |  Bin 3077 -> 0 bytes
 .../src/main/resources/assets/images/community.svg |    9 +
 .../main/resources/assets/images/documentation.svg |    4 +-
 .../src/main/resources/assets/images/favicon.ico   |  Bin 5558 -> 27198 bytes
 .../assets/images/grails-cupsonly-logo-white.svg   |   26 -
 .../src/main/resources/assets/images/groovy.svg    |    1 +
 .../src/main/resources/assets/images/java.svg      |    1 +
 .../src/main/resources/assets/images/slack.svg     |   18 -
 .../main/resources/assets/images/spring-boot.svg   |   20 +
 .../src/main/resources/assets/images/spring.svg    |    1 +
 .../resources/assets/javascripts/application.js    |    4 +-
 .../main/resources/assets/javascripts/welcome.js   |  116 ++
 .../resources/assets/stylesheets/application.css   |    4 +-
 .../main/resources/assets/stylesheets/welcome.css  |   63 ++
 .../src/main/resources/gsp/index.gsp               |  397 +++++--
 .../src/main/resources/gsp/main.gsp                |  113 +-
 .../grails-forge-core/src/main/resources/pom.xml   |    6 +
 .../groovy/org/grails/forge/BuildBuilder.groovy    |   14 +-
 .../dependencies/GradleConfigurationSpec.groovy    |    3 +-
 .../GradleDependencyComparatorSpec.groovy          |    3 +-
 .../grails/forge/build/gradle/GradleSpec.groovy    |   13 +-
 .../feature/asciidoctor/AsciidoctorSpec.groovy     |    5 +-
 .../feature/assetPipeline/AssetPipelineSpec.groovy |   45 +-
 .../feature/database/HibernateGormSpec.groovy      |    5 +-
 .../feature/database/TestContainersSpec.groovy     |   22 +-
 .../workflows/PlainGithubWorkflowSpec.groovy       |    5 +-
 .../forge/feature/grails/GrailsBaseSpec.groovy     |   11 +-
 .../feature/grails/GrailsDefaultPluginsSpec.groovy |    5 +-
 .../feature/grails/GrailsGradlePluginSpec.groovy   |    5 +-
 .../grailsProfiles/GrailsProfilesSpec.groovy       |    5 +-
 .../feature/grailsWrapper/GrailsWrapperSpec.groovy |    3 +-
 .../feature/lang/GrailsApplicationSpec.groovy      |    7 +-
 .../forge/feature/logging/LogbackSpec.groovy       |    4 +-
 .../migration/DatabaseMigrationPluginSpec.groovy   |    5 +-
 .../forge/feature/other/ShadePluginSpec.groovy     |    3 +-
 .../reloading/SpringBootDevToolsSpec.groovy        |   38 +-
 .../forge/feature/spring/SpringBootSpec.groovy     |   19 +-
 .../spring/SpringBootVirtualThreadsSpec.groovy     |    7 +-
 .../feature/spring/SpringResourcesSpec.groovy      |    3 +-
 .../feature/test/GebWithTestcontainersSpec.groovy  |    5 +-
 .../test/GebWithWebDriverBinariesSpec.groovy       |   11 +-
 .../org/grails/forge/feature/test/JUnitSpec.groovy |   39 -
 .../grails/forge/feature/view/GrailsGspSpec.groovy |    9 +-
 .../forge/feature/view/json/ViewJsonSpec.groovy    |    7 +-
 .../forge/feature/view/json/ViewMarkupSpec.groovy  |    4 +-
 .../grails/forge/feature/web/GrailsWebSpec.groovy  |    5 +-
 .../org/grails/forge/fixture/ContextFixture.groovy |    3 +-
 .../grails/forge/options/TestFrameworkSpec.groovy  |   13 +-
 .../options/TestRockerModelProviderSpec.groovy     |   12 +-
 grails-forge/settings.gradle                       |   79 +-
 .../org/grails/forge/utils/CommandSpec.groovy      |    7 +-
 grails-geb/README.md                               |    4 +-
 grails-geb/build.gradle                            |    2 +-
 .../src/main/templates/FunctionalSpec.groovy       |   19 +-
 .../plugin/geb/WebDriverContainerHolder.groovy     |    4 +-
 .../geb/serviceloader/ServiceRegistry.groovy       |    2 +-
 grails-gradle/buildSrc/settings.gradle             |   64 +-
 grails-gradle/common/build.gradle                  |    2 +-
 grails-gradle/gradle/code-style-config.gradle      |   61 -
 grails-gradle/gradle/docs-config.gradle            |   18 +-
 grails-gradle/gradle/test-config.gradle            |    9 +-
 .../gradle/wrapper/gradle-wrapper.properties       |    4 +-
 grails-gradle/model/build.gradle                   |    2 +-
 .../src/main/groovy/grails/util/Metadata.groovy    |    4 +-
 grails-gradle/plugins/build.gradle                 |   19 +-
 .../gradle/plugin/core/GrailsExtension.groovy      |   14 +
 .../gradle/plugin/core/GrailsGradlePlugin.groovy   |  223 +++-
 .../gradle/plugin/web/GrailsWebGradlePlugin.groovy |   40 +-
 .../gradle/plugin/core/GradleSpecification.groovy  |  134 +++
 .../core/GrailsGradlePluginJavaCompatSpec.groovy   |  109 ++
 .../core/GrailsGradlePluginToolchainSpec.groovy    |  136 +++
 .../fork-settings-custom/build.gradle              |   18 +
 .../fork-settings-custom/gradle.properties         |    1 +
 .../grails-app/conf/application.yml                |    0
 .../fork-settings-custom/settings.gradle           |    1 +
 .../fork-settings-defaults/build.gradle            |   18 +
 .../fork-settings-defaults/gradle.properties       |    1 +
 .../grails-app/conf/application.yml                |    0
 .../fork-settings-defaults/settings.gradle         |    1 +
 .../java-compat-no-toolchain/build.gradle          |   21 +
 .../java-compat-no-toolchain/gradle.properties     |    1 +
 .../grails-app/conf/application.yml                |    0
 .../java-compat-no-toolchain/settings.gradle       |    1 +
 .../java-compat-toolchain-23/build.gradle          |   29 +
 .../java-compat-toolchain-23/gradle.properties     |    1 +
 .../grails-app/conf/application.yml                |    0
 .../java-compat-toolchain-23/settings.gradle       |    1 +
 .../java-compat-toolchain-24/build.gradle          |   29 +
 .../java-compat-toolchain-24/gradle.properties     |    1 +
 .../grails-app/conf/application.yml                |    0
 .../java-compat-toolchain-24/settings.gradle       |    1 +
 .../java-compat-toolchain-current/build.gradle     |   27 +
 .../gradle.properties                              |    1 +
 .../grails-app/conf/application.yml                |    0
 .../java-compat-toolchain-current/settings.gradle  |    1 +
 .../no-toolchain-javaexec/build.gradle             |   19 +
 .../no-toolchain-javaexec/gradle.properties        |    1 +
 .../grails-app/conf/application.yml                |    0
 .../no-toolchain-javaexec/settings.gradle          |    1 +
 .../test-projects/no-toolchain-web/build.gradle    |    9 +
 .../no-toolchain-web/gradle.properties             |    1 +
 .../grails-app/conf/application.yml                |    0
 .../test-projects/no-toolchain-web/settings.gradle |    1 +
 .../test-projects/toolchain-command/build.gradle   |   25 +
 .../toolchain-command/gradle.properties            |    1 +
 .../grails-app/conf/application.yml                |    0
 .../toolchain-command/settings.gradle              |    1 +
 .../test-projects/toolchain-javaexec/build.gradle  |   26 +
 .../toolchain-javaexec/gradle.properties           |    1 +
 .../grails-app/conf/application.yml                |    0
 .../toolchain-javaexec/settings.gradle             |    1 +
 .../test-projects/toolchain-override/build.gradle  |   30 +
 .../toolchain-override/gradle.properties           |    1 +
 .../grails-app/conf/application.yml                |    0
 .../toolchain-override/settings.gradle             |    1 +
 .../test-projects/toolchain-test/build.gradle      |   21 +
 .../test-projects/toolchain-test/gradle.properties |    1 +
 .../toolchain-test/grails-app/conf/application.yml |    0
 .../test-projects/toolchain-test/settings.gradle   |    1 +
 grails-gradle/settings.gradle                      |   70 +-
 grails-gradle/tasks/build.gradle                   |    2 +-
 grails-gsp/core/build.gradle                       |    2 +-
 .../org/grails/gsp/compiler/GroovyPageParser.java  |   13 +-
 grails-gsp/grails-layout/build.gradle              |    2 +-
 grails-gsp/grails-sitemesh3/build.gradle           |    2 +-
 grails-gsp/grails-taglib/build.gradle              |    2 +-
 .../grails/core/gsp/DefaultGrailsTagLibClass.java  |   17 +
 .../core/gsp/DefaultGrailsTagLibClassSpec.groovy   |  108 ++
 grails-gsp/grails-web-gsp-taglib/build.gradle      |    2 +-
 grails-gsp/grails-web-gsp/build.gradle             |    2 +-
 grails-gsp/grails-web-jsp/build.gradle             |    2 +-
 grails-gsp/grails-web-taglib/build.gradle          |    2 +-
 grails-gsp/plugin/build.gradle                     |    8 +-
 .../plugins/web/taglib/ApplicationTagLib.groovy    |    3 +-
 .../grails/plugins/web/taglib/FormTagLib.groovy    |    2 +-
 .../mapping/RestfulReverseUrlRenderingTests.groovy |   21 +
 .../groovy/org/grails/web/pages/ParseSpec.groovy   |   31 +
 .../web/taglib/AbstractGrailsTagTests.groovy       |    7 +
 .../org/grails/web/taglib/FormTagLibTests.groovy   |   28 +
 grails-i18n/build.gradle                           |    2 +-
 grails-interceptors/build.gradle                   |    2 +-
 .../web/interceptors/UrlMappingMatcherSpec.groovy  |    7 +-
 grails-logging/build.gradle                        |    2 +-
 grails-micronaut/build.gradle                      |    3 +-
 .../micronaut/GrailsMicronautGrailsPlugin.groovy   |   36 +-
 grails-mimetypes/build.gradle                      |    2 +-
 .../web/mime/HttpServletRequestExtension.groovy    |   14 +-
 .../web/mime/HttpServletResponseExtension.groovy   |    2 +-
 .../groovy/grails/web/mime/MimeUtilitySpec.groovy  |   11 +
 .../web/mime/MimeTypesConfigurationSpec.groovy     |   11 +
 .../grails/web/mime/AcceptHeaderParserSpec.groovy  |    5 +
 .../mvc/RequestAndResponseMimeTypesApiSpec.groovy  |    7 +
 grails-profiles/base/commands/add-property.groovy  |  132 +++
 grails-profiles/base/features/geb2/feature.yml     |    2 +-
 grails-profiles/base/profile.yml                   |    2 +
 grails-profiles/base/skeleton/build.gradle         |   15 +-
 .../gradle/wrapper/gradle-wrapper.properties       |    4 +-
 .../gradle/wrapper/gradle-wrapper.properties       |    4 +-
 .../grails-app/assets/images/advancedgrails.svg    |    6 +-
 .../assets/images/apple-touch-icon-retina.png      |  Bin 7038 -> 0 bytes
 .../grails-app/assets/images/apple-touch-icon.png  |  Bin 3077 -> 0 bytes
 .../grails-app/assets/images/community.svg         |    9 +
 .../grails-app/assets/images/documentation.svg     |    4 +-
 .../skeleton/grails-app/assets/images/favicon.ico  |  Bin 5558 -> 27198 bytes
 .../assets/images/grails-cupsonly-logo-white.svg   |   26 -
 .../skeleton/grails-app/assets/images/groovy.svg   |    1 +
 .../web/skeleton/grails-app/assets/images/java.svg |    1 +
 .../skeleton/grails-app/assets/images/slack.svg    |   18 -
 .../grails-app/assets/images/spring-boot.svg       |   20 +
 .../skeleton/grails-app/assets/images/spring.svg   |    1 +
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/javascripts/welcome.js       |  115 ++
 .../grails-app/assets/stylesheets/application.css  |    4 +-
 .../grails-app/assets/stylesheets/welcome.css      |   63 ++
 .../web/skeleton/grails-app/views/index.gsp        |  397 +++++--
 .../web/skeleton/grails-app/views/layouts/main.gsp |  113 +-
 grails-rest-transforms/build.gradle                |    2 +-
 .../rest/render/DefaultRendererRegistrySpec.groovy |   11 +
 .../web/rest/render/VndErrorRenderingSpec.groovy   |    8 +
 .../web/rest/render/hal/HalJsonRendererSpec.groovy |   10 +
 .../web/rest/render/html/HtmlRendererSpec.groovy   |   10 +
 .../web/rest/render/json/JsonRendererSpec.groovy   |    2 +
 grails-scaffolding/build.gradle                    |    2 +-
 grails-services/build.gradle                       |    2 +-
 grails-shell-cli/build.gradle                      |   10 +-
 .../cli/compiler/grape/AetherGrapeEngine.java      |    2 +-
 .../compiler/grape/AetherGrapeEngineFactory.java   |    2 +-
 .../grails/cli/profile/ProfileRepoConfig.groovy    |   14 +-
 .../cli/profile/commands/CreateAppCommand.groovy   |  204 +++-
 .../profile/commands/CreateAppCommandSpec.groovy   |    4 +-
 grails-spring/build.gradle                         |    2 +-
 .../grails/spring/GrailsApplicationContext.java    |   13 +
 grails-test-core/build.gradle                      |    2 +-
 grails-test-examples/app1/build.gradle             |    3 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../functionaltests/BookController.groovy          |   11 +-
 .../controllers/functionaltests/UrlMappings.groovy |   62 ++
 .../async/AsyncTestController.groovy               |  304 +++++
 .../binding/AdvancedDataBindingController.groovy   |  306 +++++
 .../caching/CacheTestController.groovy             |  131 +++
 .../codecs/CodecTestController.groovy              |  281 +++++
 .../commanddi/CommandDIController.groovy           |  406 +++++++
 .../contentneg/ContentNegotiationController.groovy |  168 +++
 .../functionaltests/cors/CorsTestController.groovy |  113 ++
 .../ErrorHandlingTestController.groovy             |  215 ++++
 .../fileupload/FileUploadTestController.groovy     |  241 ++++
 .../functionaltests/flow/FlowController.groovy     |  245 ++++
 .../flow/FlowTargetController.groovy               |   43 +-
 .../functionaltests/i18n/I18nTestController.groovy |  226 ++++
 .../interceptors/ActionExcludeInterceptor.groovy   |   35 +-
 .../interceptors/AdvancedMatchingController.groovy |  107 ++
 .../AttributeSettingInterceptor.groovy             |   28 +-
 .../interceptors/BlockingInterceptor.groovy        |   42 +-
 .../ConditionalMatchInterceptor.groovy             |   52 +
 .../interceptors/FirstInterceptor.groovy           |   38 +-
 .../HttpMethodMatchingInterceptor.groovy}          |   24 +-
 .../interceptors/InterceptorTestController.groovy  |  172 +++
 .../interceptors/MultipleRulesInterceptor.groovy   |   35 +-
 .../NamespaceMatchingInterceptor.groovy}           |   24 +-
 .../interceptors/SecondInterceptor.groovy          |   38 +-
 .../interceptors/SessionInterceptor.groovy         |   36 +-
 .../interceptors/ThirdInterceptor.groovy           |   38 +-
 .../interceptors/TimingInterceptor.groovy          |   37 +-
 .../RequestResponseTestController.groovy           |  270 +++++
 .../springevents/SpringEventController.groovy      |  148 +++
 .../taglib/TagLibTestController.groovy             |  326 ++++++
 .../urlmappings/UrlMappingsTestController.groovy   |  167 +++
 .../domain/functionaltests/binding/Address.groovy} |   25 +-
 .../functionaltests/binding/Contributor.groovy}    |   21 +-
 .../domain/functionaltests/binding/Employee.groovy |   43 +-
 .../domain/functionaltests/binding/Project.groovy} |   24 +-
 .../domain/functionaltests/binding/Team.groovy}    |   22 +-
 .../functionaltests/binding/TeamMember.groovy}     |   24 +-
 .../functionaltests/constraints/Appointment.groovy |  109 ++
 .../functionaltests/constraints/PaymentInfo.groovy |  178 +++
 .../functionaltests/constraints/Product.groovy     |   76 ++
 .../constraints/Registration.groovy                |  158 +++
 .../functionaltests/events/AuditedEntity.groovy    |  108 ++
 .../functionaltests/events/StatefulEntity.groovy   |   81 ++
 .../functionaltests/events/VetoableEntity.groovy   |   67 ++
 .../domain/functionaltests/gorm/Author.groovy}     |   40 +-
 .../domain/functionaltests/gorm/GormBook.groovy    |   70 ++
 .../functionaltests/services/InventoryItem.groovy} |   25 +-
 .../app1/grails-app/i18n/messages.properties       |    9 +
 .../app1/grails-app/i18n/messages_de.properties    |    9 +
 .../app1/grails-app/i18n/messages_fr.properties    |    9 +
 .../caching/CacheTestService.groovy                |  133 +++
 .../commanddi/NotificationService.groovy           |   88 ++
 .../commanddi/PricingService.groovy                |   77 ++
 .../commanddi/ValidationHelperService.groovy       |   80 ++
 .../services/AsyncProcessingService.groovy         |  122 ++
 .../services/InventoryService.groovy               |  204 ++++
 .../functionaltests/services/OrderService.groovy   |  118 ++
 .../springevents/EventListenerService.groovy       |  169 +++
 .../springevents/EventPublisherService.groovy      |   78 ++
 .../functionaltests/taglib/CustomTagLib.groovy     |  341 ++++++
 .../grails-app/views/contentNegotiation/error.gsp  |   29 +
 .../grails-app/views/contentNegotiation/index.gsp  |   34 +
 .../views/tagLibTest/_simpleTemplate.gsp           |   19 +
 .../grails-app/views/tagLibTest/testAlertTag.gsp   |   20 +
 .../grails-app/views/tagLibTest/testAppInfoTag.gsp |   20 +
 .../grails-app/views/tagLibTest/testBadgeTag.gsp   |   20 +
 .../views/tagLibTest/testBuiltInCheckBox.gsp       |   20 +
 .../views/tagLibTest/testBuiltInCollect.gsp        |   20 +
 .../views/tagLibTest/testBuiltInCookie.gsp         |   20 +
 .../views/tagLibTest/testBuiltInCreateLink.gsp     |   21 +
 .../views/tagLibTest/testBuiltInEach.gsp           |   21 +
 .../views/tagLibTest/testBuiltInFieldValue.gsp     |   20 +
 .../views/tagLibTest/testBuiltInFindAll.gsp        |   20 +
 .../views/tagLibTest/testBuiltInForm.gsp           |   23 +
 .../views/tagLibTest/testBuiltInFormatDate.gsp     |   21 +
 .../views/tagLibTest/testBuiltInFormatNumber.gsp   |   21 +
 .../views/tagLibTest/testBuiltInHeader.gsp         |   20 +
 .../views/tagLibTest/testBuiltInHiddenField.gsp    |   20 +
 .../grails-app/views/tagLibTest/testBuiltInIf.gsp  |   24 +
 .../views/tagLibTest/testBuiltInInclude.gsp        |   20 +
 .../views/tagLibTest/testBuiltInJoin.gsp           |   20 +
 .../views/tagLibTest/testBuiltInLink.gsp           |   22 +
 .../views/tagLibTest/testBuiltInMessage.gsp        |   20 +
 .../views/tagLibTest/testBuiltInPaginate.gsp       |   20 +
 .../views/tagLibTest/testBuiltInPasswordField.gsp  |   20 +
 .../views/tagLibTest/testBuiltInRadio.gsp          |   22 +
 .../views/tagLibTest/testBuiltInRender.gsp         |   20 +
 .../views/tagLibTest/testBuiltInResource.gsp       |   20 +
 .../views/tagLibTest/testBuiltInSelect.gsp         |   20 +
 .../grails-app/views/tagLibTest/testBuiltInSet.gsp |   23 +
 .../views/tagLibTest/testBuiltInSortableColumn.gsp |   26 +
 .../views/tagLibTest/testBuiltInTextArea.gsp       |   20 +
 .../views/tagLibTest/testBuiltInTextField.gsp      |   20 +
 .../views/tagLibTest/testBuiltInUploadForm.gsp     |   23 +
 .../views/tagLibTest/testBuiltInWhile.gsp          |   21 +
 .../views/tagLibTest/testConditionalTags.gsp       |   21 +
 .../views/tagLibTest/testCssClassTag.gsp           |   20 +
 .../views/tagLibTest/testDefinitionListTag.gsp     |   20 +
 .../views/tagLibTest/testEncodingTags.gsp          |   22 +
 .../views/tagLibTest/testFormattedTag.gsp          |   20 +
 .../grails-app/views/tagLibTest/testHelloTag.gsp   |   20 +
 .../grails-app/views/tagLibTest/testIterateTag.gsp |   20 +
 .../grails-app/views/tagLibTest/testJoinTag.gsp    |   20 +
 .../grails-app/views/tagLibTest/testListTag.gsp    |   20 +
 .../grails-app/views/tagLibTest/testNestedTags.gsp |   22 +
 .../grails-app/views/tagLibTest/testPanelTag.gsp   |   20 +
 .../views/tagLibTest/testProgressTag.gsp           |   20 +
 .../grails-app/views/tagLibTest/testRawTag.gsp     |   20 +
 .../grails-app/views/tagLibTest/testRepeatTag.gsp  |   20 +
 .../views/tagLibTest/testRequestInfoTag.gsp        |   20 +
 .../views/tagLibTest/testSessionValueTag.gsp       |   20 +
 .../grails-app/views/tagLibTest/testSetVarTag.gsp  |   20 +
 .../views/tagLibTest/testTagsWithModel.gsp         |   26 +
 .../grails-app/views/tagLibTest/testWrapperTag.gsp |   20 +
 .../groovy/functionaltests/AtResourceSpec.groovy   |   27 +-
 .../functionaltests/BookFunctionalSpec.groovy      |   47 +-
 .../BookRestfulControllerSpec.groovy               |   36 +-
 .../groovy/functionaltests/HomeSpec.groovy         |   37 +-
 .../groovy/functionaltests/LoadAfterSpec.groovy    |   10 +-
 .../functionaltests/MiscFunctionalSpec.groovy      |   28 +-
 .../functionaltests/async/AsyncPromiseSpec.groovy  |  337 ++++++
 .../binding/AdvancedDataBindingSpec.groovy         |  445 ++++++++
 .../functionaltests/caching/CachingSpec.groovy     |  357 ++++++
 .../codecs/SecurityCodecsSpec.groovy               |  374 +++++++
 .../commanddi/CommandObjectDISpec.groovy           |  325 ++++++
 .../constraints/ConstraintValidationSpec.groovy    |  996 +++++++++++++++++
 .../contentneg/ContentNegotiationSpec.groovy       |  310 ++++++
 .../functionaltests/cors/CorsAdvancedSpec.groovy   |  253 +++++
 .../errorhandling/ErrorHandlingSpec.groovy         |  166 +++
 .../functionaltests/events/DomainEventsSpec.groovy |  574 ++++++++++
 .../fileupload/FileUploadSpec.groovy               |  321 ++++++
 .../flow/FlashChainForwardSpec.groovy              |  305 +++++
 .../functionaltests/gorm/GormAdvancedSpec.groovy   |  719 ++++++++++++
 .../i18n/InternationalizationSpec.groovy           |  375 +++++++
 .../InterceptorAdvancedMatchingSpec.groovy         |  241 ++++
 .../interceptors/InterceptorOrderingSpec.groovy    |  264 +++++
 .../layout/LayoutFunctionalSpec.groovy             |   27 +-
 .../layout/LayoutWithTemplateSpec.groovy           |   13 +-
 .../functionaltests/pages/BarListPage.groovy}      |   16 +-
 .../groovy/functionaltests/pages/BookPages.groovy  |   62 ++
 .../pages/ConventionLayoutPage.groovy}             |   17 +-
 .../functionaltests/pages/FooLayoutPage.groovy}    |   17 +-
 .../pages/FooLayoutSnippetPage.groovy}             |   17 +-
 .../functionaltests/pages/FooListPage.groovy}      |   16 +-
 .../groovy/functionaltests/pages/HomePage.groovy}  |   20 +-
 .../functionaltests/pages/LoginAuthPage.groovy}    |   17 +-
 .../groovy/functionaltests/pages/MiscPages.groovy} |   27 +-
 .../functionaltests/pages/PartialPage.groovy}      |   17 +-
 .../requestresponse/RequestResponseSpec.groovy     |  325 ++++++
 .../scaffolding/BarFunctionalSpec.groovy           |   14 +-
 .../scaffolding/FooFunctionalSpec.groovy           |   14 +-
 .../services/ServiceIntegrationSpec.groovy         |  379 +++++++
 .../springevents/SpringEventsSpec.groovy           |  293 +++++
 .../functionaltests/taglib/TagLibSpec.groovy       |  720 ++++++++++++
 .../urlmappings/UrlMappingsSpec.groovy             |  265 +++++
 .../springevents/CustomApplicationEvent.groovy     |   34 +-
 .../springevents/PriorityEvent.groovy              |   25 +-
 .../springevents/UserActionEvent.groovy            |   34 +-
 .../functionaltests/BookControllerSpec.groovy      |   10 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../groovy/app2/NotFoundHandlerSpec.groovy         |   22 +-
 .../groovy/app2/pages/FooPages.groovy}             |   23 +-
 .../groovy/app3/LoadAfterSpec.groovy               |    9 +-
 .../groovy/app3/pages/LoginAuthPage.groovy}        |   16 +-
 .../async-events-pubsub-demo/build.gradle          |    4 +-
 .../services/pubsub/demo/TotalService.groovy       |   12 +-
 .../groovy/pubsub/demo/AsyncEventsSpec.groovy      |  203 ++++
 .../groovy/pubsub/demo/PubSubSpec.groovy           |   37 +-
 .../groovy/pubsub/demo/TaskControllerSpec.groovy   |   34 +-
 .../main/groovy/pubsub/demo/BookSubscriber.groovy  |   16 +-
 grails-test-examples/cache/build.gradle            |    6 +-
 .../com/demo/AdvancedCachingController.groovy      |  123 ++
 .../controllers/com/demo/UrlMappings.groovy        |   54 +
 .../com/demo/AdvancedCachingService.groovy         |  158 +++
 .../com/demo/AdvancedCachingIntegrationSpec.groovy |  204 ++++
 .../com/demo/AdvancedCachingServiceSpec.groovy     |  316 ++++++
 .../{gorm => database-cleanup}/build.gradle        |   28 +-
 .../grails-app/conf/application.yml                |   44 +-
 .../database-cleanup/grails-app/conf/logback.xml   |   26 +-
 .../controllers/dbcleanup}/UrlMappings.groovy      |    2 +-
 .../grails-app/domain/dbcleanup/Author.groovy      |   16 +-
 .../grails-app/domain/dbcleanup}/Book.groovy       |   13 +-
 .../grails-app/init/dbcleanup/Application.groovy}  |   17 +-
 .../database-cleanup/grails-app/views/error.gsp    |   27 +
 .../groovy/dbcleanup/ClassLevelCleanupSpec.groovy  |   74 ++
 .../groovy/dbcleanup/MethodLevelCleanupSpec.groovy |   87 ++
 .../datasources/OsivBookController.groovy}         |   24 +-
 .../controllers/datasources/UrlMappings.groovy     |   13 +-
 .../datasources/grails-app/domain/ds2/Book.groovy  |    2 +
 .../domain/ds2/{Book.groovy => Chapter.groovy}     |    4 +-
 .../datasources/grails-app/views/osivBook/show.gsp |   29 +
 .../CrossDatasourceTransactionSpec.groovy          |  284 +++++
 .../functionaltests/DatasourceSwitchingSpec.groovy |  456 ++++++++
 .../functionaltests/MultipleDataSourcesSpec.groovy |   13 +-
 .../functionaltests/OsivGspRenderingSpec.groovy}   |   18 +-
 .../functionaltests/pages/OsivBookPage.groovy}     |   13 +-
 grails-test-examples/demo33/build.gradle           |    2 +
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 .../groovy/demo/JsonControllerSpec.groovy          |   26 +-
 .../groovy/exploded/LoadAfterSpec.groovy           |    9 +-
 .../groovy/exploded/pages/LoginAuthPage.groovy}    |   15 +-
 .../test/app/ConfigurationPrioritySpec.groovy      |  249 +++++
 .../test/app/EnvironmentConfigurationSpec.groovy   |  223 ++++
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 grails-test-examples/geb/grails-cli.yml            |    2 +-
 grails-test-examples/gorm/build.gradle             |    5 +-
 .../controllers/gorm/AuthorController.groovy       |   10 +-
 .../gorm/BookController.groovy}                    |   17 +-
 .../controllers/gorm}/UrlMappings.groovy           |    2 +-
 .../grails-app/domain/gorm/AuditedEntity.groovy    |  148 +++
 .../grails-app/domain/gorm/Author.groovy}          |   29 +-
 .../gorm/grails-app/domain/gorm/Book.groovy        |   33 +-
 .../grails-app/i18n/messages.properties            |    1 +
 .../gorm/AuthorDataService.groovy}                 |   20 +-
 .../services/gorm/BookDataService.groovy           |  151 +++
 .../services/gorm/CompileStaticBookService.groovy  |   89 ++
 .../services/gorm/TransactionTestService.groovy    |  187 ++++
 .../gorm/WhereQueryVariableScopeService.groovy     |   86 ++
 .../gorm/grails-app/views/error.gsp                |   48 +
 .../gorm/grails-app/views/index.gsp                |   32 +
 .../gorm/grails-app/views/notFound.gsp             |   28 +
 .../groovy/gorm/BindingOutsideRequestSpec.groovy   |    5 +
 ...OutsideRequestSpec.groovy => ExistsSpec.groovy} |   53 +-
 .../groovy/gorm/FieldsValidationSpec.groovy        |  552 +++++++++
 .../groovy/gorm/GormCascadeOperationsSpec.groovy   |  357 ++++++
 .../groovy/gorm/GormCriteriaQueriesSpec.groovy     |  614 ++++++++++
 .../groovy/gorm/GormDataServicesSpec.groovy        |  421 +++++++
 .../groovy/gorm/GormEventsSpec.groovy              |  377 +++++++
 .../groovy/gorm/GormWhereQueryAdvancedSpec.groovy  |  420 +++++++
 .../groovy/gorm/ScaffoldingFunctionalSpec.groovy   |  293 +++++
 .../groovy/gorm/TransactionPropagationSpec.groovy  |  268 +++++
 ...TransactionalWhereQueryVariableScopeSpec.groovy |  109 ++
 .../integration-test/groovy/gorm/UserSpec.groovy   |   33 +-
 .../groovy/gorm/ValidationConstraintsSpec.groovy   |  496 +++++++++
 .../groovy/gorm/pages/AuthorPages.groovy           |   75 ++
 .../groovy/gorm/pages/BookPages.groovy             |   79 ++
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 .../example/grails/layout/TagLibController.groovy  |   95 ++
 .../grails-app/views/tagLib/_partial.gsp           |   21 +
 .../grails-app/views/tagLib/collectTag.gsp         |   29 +
 .../grails-app/views/tagLib/createLinkTag.gsp      |   30 +
 .../gsp-layout/grails-app/views/tagLib/eachTag.gsp |   33 +
 .../gsp-layout/grails-app/views/tagLib/elseTag.gsp |   33 +
 .../grails-app/views/tagLib/encodeTags.gsp         |   30 +
 .../gsp-layout/grails-app/views/tagLib/formTag.gsp |   50 +
 .../grails-app/views/tagLib/formatTags.gsp         |   30 +
 .../gsp-layout/grails-app/views/tagLib/ifTag.gsp   |   31 +
 .../gsp-layout/grails-app/views/tagLib/index.gsp   |   32 +
 .../gsp-layout/grails-app/views/tagLib/joinTag.gsp |   30 +
 .../gsp-layout/grails-app/views/tagLib/linkTag.gsp |   30 +
 .../grails-app/views/tagLib/renderTag.gsp          |   31 +
 .../gsp-layout/grails-app/views/tagLib/setTag.gsp  |   35 +
 .../gsp-layout/grails-forge-cli.yml                |    2 +-
 .../integration-test/groovy/GspTagLibSpec.groovy   |  275 +++++
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 .../gsp-sitemesh3/grails-forge-cli.yml             |    2 +-
 .../gsp-spring-boot/script/.sdkmanrc               |    4 +-
 .../build.gradle                                   |   25 +-
 .../grails-app/conf/application.yml                |   58 +
 .../grails-app/conf/logback.xml                    |   26 +-
 .../grails-app/domain/example/Product.groovy}      |   21 +-
 .../grails-app/init/example/Application.groovy}    |   19 +-
 .../example/InheritedProductService.groovy}        |   24 +-
 .../services/example/ProductService.groovy         |   58 +
 .../DataServiceDatasourceInheritanceSpec.groovy    |  112 ++
 .../DataServiceMultiDataSourceSpec.groovy          |  180 +++
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../controllers/example/BookController.groovy      |    8 +-
 .../groovy/example/DatabasePerTenantSpec.groovy    |    6 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../functional/tests/BookController.groovy         |    8 +-
 .../functional/tests/BookControllerSpec.groovy     |   24 +-
 .../functional/tests/pages/BookPages.groovy}       |   40 +-
 .../functional/tests/BookControllerUnitSpec.groovy |   10 +-
 .../grails-multiple-datasources/build.gradle       |    4 +
 .../datasources/SecondaryBookController.groovy     |   78 ++
 .../controllers/datasources}/UrlMappings.groovy    |   11 +-
 .../MultiDataSourceWithSessionSpec.groovy          |   74 ++
 .../build.gradle                                   |   25 +-
 .../grails-app/conf/application.yml                |   62 ++
 .../grails-app/conf/logback.xml                    |   26 +-
 .../grails-app/domain/example/Metric.groovy}       |   25 +-
 .../grails-app/init/example/Application.groovy}    |   16 +-
 .../services/example/MetricService.groovy          |   65 ++
 .../MultiTenantMultiDataSourceSpec.groovy          |  183 +++
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../controllers/example/BookController.groovy      |    8 +-
 .../example/PartitionedMultiTenancySpec.groovy     |    6 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../schemapertenant/BookController.groovy          |    8 +-
 .../schemapertenant/SchemaPerTenantSpec.groovy     |    5 +-
 .../hibernate5/issue450/build.gradle               |    3 +-
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 .../groovy/example/BookControllerSpec.groovy       |   27 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 grails-test-examples/issue-11102/build.gradle      |    6 +-
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 .../groovy/issue11102/HttpClientCommonSpec.groovy  |   45 -
 .../groovy/issue11102/TestControllerSpec.groovy    |   27 +-
 grails-test-examples/issue-11767/build.gradle      |    7 +-
 .../groovy/issue11767/app/ConfigLoadingSpec.groovy |   37 +-
 grails-test-examples/issue-15228/build.gradle      |    3 +-
 .../issue11767/app/GsonViewRespondSpec.groovy      |   58 +-
 grails-test-examples/issue-views-182/build.gradle  |    3 +-
 .../groovy/views182/CustomErrorSpec.groovy         |   27 +-
 .../groovy/views182/HttpClientCommonSpec.groovy    |   46 -
 .../build.gradle                                   |   18 +-
 .../grails-app/conf/application.yml                |   35 +-
 .../micronautgroovyonly}/UrlMappings.groovy        |    3 +-
 .../init/micronautgroovyonly/Application.groovy    |   20 +-
 .../BeanInjectionService.groovy                    |   44 +-
 .../micronautgroovyonly/TestService.groovy         |   11 +-
 .../BeanInjectionServiceSpec.groovy}               |   41 +-
 .../MicronautContextSpec.groovy                    |   83 ++
 .../MicronautQualifierSpec.groovy                  |   97 ++
 .../main/groovy/bean/injection/AppConfig.groovy}   |   17 +-
 .../bean/injection/FactoryCreatedService.groovy    |   10 +-
 .../main/groovy/bean/injection/NamedService.groovy |    7 +-
 .../bean/injection/PrimaryNamedService.groovy}     |   16 +-
 .../main/groovy/bean/injection/Qualified.groovy}   |   19 +-
 .../bean/injection/QualifiedNamedService.groovy}   |   16 +-
 .../bean/injection/RegularNamedService.groovy}     |   17 +-
 .../groovy/bean/injection/ServiceFactory.groovy    |   24 +-
 .../bean/injection/SpecialNamedService.groovy}     |   17 +-
 grails-test-examples/micronaut/build.gradle        |   15 +-
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    2 +-
 .../micronaut/grails-app/conf/application.yml      |    7 +
 .../micronaut/ExternalApiController.groovy         |  113 ++
 .../micronaut/MicronautTestController.groovy}      |   41 +-
 .../controllers/micronaut/UrlMappings.groovy       |   15 +
 .../services/micronaut/ExternalApiService.groovy   |  110 ++
 .../micronaut/MicronautBeanDuplicationSpec.groovy  |  105 ++
 .../groovy/micronaut/MicronautBeanTypesSpec.groovy |   99 ++
 .../groovy/micronaut/MicronautContextSpec.groovy   |   92 ++
 .../MicronautDeclarativeClientSpec.groovy          |  246 ++++
 .../micronaut/MicronautErsatzAdvancedSpec.groovy   |  557 ++++++++++
 .../micronaut/MicronautErsatzPatternSpec.groovy    |  444 ++++++++
 .../micronaut/MicronautErsatzRoundtripSpec.groovy  |  426 +++++++
 .../micronaut/MicronautPluginBeanSpec.groovy       |   85 ++
 .../groovy/micronaut/MicronautQualifierSpec.groovy |  106 ++
 .../main/groovy/bean/injection/AppConfig.groovy}   |   17 +-
 .../bean/injection/FactoryCreatedService.groovy    |   10 +-
 .../groovy/bean/injection/ServiceFactory.groovy    |   24 +-
 .../client/MicronautAdvancedClient.groovy          |   59 +
 .../client/MicronautFilteredClient.groovy}         |   23 +-
 .../micronaut/client/MicronautHeaderClient.groovy  |   21 +-
 .../micronaut/client/MicronautPathClient.groovy}   |   26 +-
 .../client/MicronautReactiveClient.groovy          |   41 +-
 .../micronaut/client/MicronautTestClient.groovy    |   43 +-
 .../java/bean/injection/JavaMessageProvider.java   |   30 +-
 .../java/bean/injection/JavaSingletonService.java  |   33 +-
 .../client/MicronautRetryableClient.java}          |   21 +-
 .../micronaut/filter/AuthTokenClientFilter.java}   |   20 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../functional/tests/BookController.groovy         |    8 +-
 .../functional/tests/BookControllerSpec.groovy     |   28 +-
 .../functional/tests/pages/BookPages.groovy}       |   40 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../examples/mongo/tenant/BookController.groovy    |    8 +-
 .../groovy/examples/mongo/tenant/BookSpec.groovy   |    7 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../functional/tests/AuthorController.groovy       |    8 +-
 .../functional/tests/BookController.groovy         |    8 +-
 .../functional/tests/AuthorControllerSpec.groovy   |   28 +-
 .../functional/tests/BookControllerSpec.groovy     |   28 +-
 .../functional/tests/pages/AuthorPages.groovy}     |   39 +-
 .../functional/tests/pages/BookPages.groovy}       |   40 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../groovy/context/ContextPathSpec.groovy          |   23 +-
 .../groovy/context/pages/EnvironmentPages.groovy}  |   23 +-
 .../groovy/namespaces/PageControllerSpec.groovy    |   19 +-
 .../namespaces/admin/ReportControllerSpec.groovy   |   18 +-
 .../namespaces/admin/pages/ReportPages.groovy}     |   24 +-
 .../groovy/namespaces/pages/AdminPage.groovy}      |   16 +-
 .../groovy/namespaces/pages/FrontendPage.groovy}   |   16 +-
 grails-test-examples/plugins/exploded/build.gradle |    3 +
 .../groovy/exploded/PluginDependencySpec.groovy    |  223 ++++
 .../plugins/issue-11767/build.gradle               |    6 +-
 .../plugins/loadfirst/build.gradle                 |    3 +
 .../groovy/loadfirst/PluginLifecycleSpec.groovy    |  236 ++++
 .../plugins/loadsecond/build.gradle                |    3 +
 .../groovy/loadsecond/PluginLoadOrderSpec.groovy   |  222 ++++
 .../build.gradle                                   |   18 +-
 .../MicronautSingletonGrailsPlugin.groovy}         |   18 +-
 .../plugins/micronaut/PluginMessageProvider.java   |   31 +-
 .../plugins/micronaut/PluginSingletonService.java  |   33 +-
 .../{micronaut => scaffolding-fields}/build.gradle |   26 +-
 .../grails-app/conf/application.yml                |   62 +-
 .../scaffoldingfields/DepartmentController.groovy  |   20 +-
 .../scaffoldingfields/EmployeeController.groovy    |   15 +-
 .../scaffoldingfields/ProjectController.groovy     |   15 +-
 .../scaffoldingfields}/UrlMappings.groovy          |    2 +-
 .../domain/scaffoldingfields/Address.groovy}       |   23 +-
 .../domain/scaffoldingfields/Department.groovy}    |   19 +-
 .../domain/scaffoldingfields/Employee.groovy       |  129 +++
 .../domain/scaffoldingfields/Project.groovy}       |   30 +-
 .../grails-app/i18n/messages.properties            |    1 +
 .../init/scaffoldingfields/Application.groovy}     |   18 +-
 .../init/scaffoldingfields/BootStrap.groovy        |  114 ++
 .../grails-app/views/_fields/default/_wrapper.gsp  |   38 +
 .../views/_fields/employee/biography/_wrapper.gsp  |   38 +
 .../views/_fields/employee/email/_wrapper.gsp      |   39 +
 .../scaffoldingfields/CrudFunctionalSpec.groovy    |  215 ++++
 .../scaffoldingfields/CustomTemplatesSpec.groovy   |  171 +++
 .../groovy/scaffoldingfields/FieldTypesSpec.groovy |  248 +++++
 .../groovy/scaffoldingfields/PaginationSpec.groovy |  502 +++++++++
 .../RelationshipsFunctionalSpec.groovy             |  534 +++++++++
 .../ValidationFunctionalSpec.groovy                |  861 ++++++++++++++
 .../scaffoldingfields/pages/DepartmentPages.groovy |  101 ++
 .../scaffoldingfields/pages/EmployeePages.groovy   |  149 +++
 .../scaffoldingfields/pages/ProjectPages.groovy    |  105 ++
 .../pages/ScaffoldCreatePage.groovy                |  147 +++
 .../pages/ScaffoldEditPage.groovy                  |  159 +++
 .../pages/ScaffoldListPage.groovy                  |  112 ++
 .../pages/ScaffoldShowPage.groovy                  |  106 ++
 .../grails-app/assets/javascripts/application.js   |    4 +-
 .../grails-app/assets/stylesheets/application.css  |    4 +-
 .../grails-app/domain/com/example/User.groovy      |    9 +-
 .../com/example/UserCommunityControllerSpec.groovy |   29 +-
 .../groovy/com/example/UserControllerSpec.groovy   |   27 +-
 ...outPage.groovy => CommunityUserListPage.groovy} |   12 +-
 .../groovy/com/example/pages/LoginPage.groovy      |   17 +-
 .../groovy/com/example/pages/LogoutPage.groovy     |   15 +-
 .../{LogoutPage.groovy => UserListPage.groovy}     |   12 +-
 .../views-functional-tests/build.gradle            |    5 +-
 .../grails-app/assets/javascripts/application.js   |    2 +-
 .../groovy/functional/tests/BookSpec.groovy        |  181 +--
 .../groovy/functional/tests/BulletinSpec.groovy    |   26 +-
 .../groovy/functional/tests/CircularSpec.groovy    |   74 +-
 .../groovy/functional/tests/CustomerSpec.groovy    |   41 +-
 .../groovy/functional/tests/EmbeddedSpec.groovy    |   58 +-
 .../groovy/functional/tests/HttpClientSpec.groovy  |   44 -
 .../groovy/functional/tests/InheritanceSpec.groovy |   38 +-
 .../tests/ModelInterceptorIntSpec.groovy           |   37 +-
 .../functional/tests/ObjectTemplateSpec.groovy     |   27 +-
 .../functional/tests/PersonInheritanceSpec.groovy  |   32 +-
 .../groovy/functional/tests/ProductSpec.groovy     |  218 ++--
 .../groovy/functional/tests/ProjectSpec.groovy     |   38 +-
 .../groovy/functional/tests/ProxySpec.groovy       |   31 +-
 .../groovy/functional/tests/TeamSpec.groovy        |   91 +-
 .../functional/tests/TestControllerSpec.groovy     |   28 +-
 .../functional/tests/TestGmlControllerSpec.groovy  |   32 +-
 .../functional/tests/TestGsonControllerSpec.groovy |   86 +-
 .../groovy/functional/tests/VehicleSpec.groovy     |   61 +-
 .../functional/tests/api/NamespacedBookSpec.groovy |  143 +--
 grails-test-suite-base/build.gradle                |    5 +-
 grails-test-suite-uber/build.gradle                |   85 +-
 ...GrailsCompileStaticCompilationErrorsSpec.groovy |    9 +
 .../GrailsTypeCheckedCompilationErrorsSpec.groovy  |    9 +
 .../grails/persistence/EntityTransformTests.groovy |    9 +
 .../groovy/grails/spring/BeanBuilderTests.groovy   |    9 +
 .../test/mixin/ControllerUnitTestMixinTests.groovy |   26 +
 .../grails/test/mixin/RestfulControllerSpec.groovy |   11 +
 .../rest/render/BaseDomainClassRendererSpec.groovy |    8 +
 .../web/codecs/HTMLJSCodecIntegrationSpec.groovy   |    5 +
 .../DefaultGrailsApplicationAttributesTests.groovy |    6 +
 .../web/servlet/FlashScopeWithErrorsTests.groovy   |    5 +
 .../grails/web/util/StreamCharBufferSpec.groovy    |    5 +
 .../org/grails/web/util/WebUtilsTests.groovy       |    5 +
 grails-test-suite-web/build.gradle                 |    2 +-
 .../grails/rest/web/RespondMethodSpec.groovy       |   20 +
 .../org/grails/compiler/web/WithFormatSpec.groovy  |   11 +
 .../rest/render/xml/DefaultXmlRendererSpec.groovy  |    5 +
 ...ngHelperDomainClassSpecialPropertiesSpec.groovy |    9 +
 .../web/binding/JSONBindingToNullSpec.groovy       |   23 +-
 .../JsonBindingWithExceptionHandlerSpec.groovy     |   24 +
 .../commandobjects/CommandObjectNoDataSpec.groovy  |   27 +
 .../CommandObjectNullabilitySpec.groovy            |   26 +
 .../web/commandobjects/CommandObjectsSpec.groovy   |   29 +
 .../web/controllers/ContentNegotiationSpec.groovy  |   16 +
 .../metaclass/CollectionBindDataMethodSpec.groovy  |   11 +
 .../web/mime/ContentFormatControllerTests.groovy   |   10 +
 .../web/mime/WithFormatContentTypeSpec.groovy      |   16 +
 grails-testing-support-core/build.gradle           |    2 +-
 .../groovy/grails/testing/spock/OnceBefore.groovy  |    2 -
 grails-testing-support-datamapping/build.gradle    |    2 +-
 grails-testing-support-dbcleanup-core/README.md    |  137 +++
 .../build.gradle                                   |   20 +-
 .../cleanup/core/ApplicationContextResolver.groovy |   50 +
 .../testing/cleanup/core/DatabaseCleaner.groovy    |   91 ++
 .../testing/cleanup/core/DatabaseCleanup.groovy    |  127 +++
 .../cleanup/core/DatabaseCleanupContext.groovy     |  220 ++++
 .../cleanup/core/DatabaseCleanupExtension.groovy   |  235 ++++
 .../cleanup/core/DatabaseCleanupInterceptor.groovy |  210 ++++
 .../cleanup/core/DatabaseCleanupStats.groovy       |  200 ++++
 .../cleanup/core/DatasourceCleanupMapping.groovy   |  156 +++
 .../core/DefaultApplicationContextResolver.groovy  |   67 ++
 .../cleanup/core/TestContextHolderListener.groovy  |   59 +
 ...ockframework.runtime.extension.IGlobalExtension |    1 +
 .../src/main/resources/META-INF/spring.factories   |    1 +
 .../cleanup/core/DatabaseCleanupContextSpec.groovy |  478 ++++++++
 .../core/DatabaseCleanupExtensionSpec.groovy       |  446 ++++++++
 .../core/DatabaseCleanupInterceptorSpec.groovy     |  678 ++++++++++++
 .../cleanup/core/DatabaseCleanupStatsSpec.groovy   |  297 +++++
 .../core/DatasourceCleanupMappingSpec.groovy       |  175 +++
 .../DefaultApplicationContextResolverSpec.groovy   |   96 ++
 grails-testing-support-dbcleanup-h2/README.md      |   28 +
 .../build.gradle                                   |   30 +-
 .../testing/cleanup/h2/H2DatabaseCleaner.groovy    |  103 ++
 .../cleanup/h2/H2DatabaseCleanupHelper.groovy      |  121 ++
 ...che.grails.testing.cleanup.core.DatabaseCleaner |    1 +
 .../cleanup/h2/H2DatabaseCleanerSpec.groovy        |  229 ++++
 .../cleanup/h2/H2DatabaseCleanupHelperSpec.groovy  |  137 +++
 .../README.md                                      |   32 +
 .../build.gradle                                   |   38 +-
 .../postgresql/PostgresDatabaseCleaner.groovy      |  132 +++
 .../PostgresDatabaseCleanupHelper.groovy           |  100 ++
 .../postgresql/PostgresContainerHolder.groovy      |   66 ++
 .../PostgresDatabaseCleanerFunctionalSpec.groovy   |  318 ++++++
 .../postgresql/PostgresDatabaseCleanerSpec.groovy  |  114 ++
 .../PostgresDatabaseCleanupHelperSpec.groovy       |   83 ++
 grails-testing-support-http-client/README.md       |  201 ++++
 .../build.gradle                                   |   32 +-
 .../testing/http/client/HttpClientSupport.groovy   | 1169 ++++++++++++++++++++
 .../testing/http/client/MultipartBody.groovy       |  191 ++++
 .../testing/http/client/TestHttpResponse.groovy    |  994 +++++++++++++++++
 .../testing/http/client/utils/JsonUtils.groovy     |  276 +++++
 .../testing/http/client/utils/XmlUtils.groovy      |  241 ++++
 .../http/client/HttpClientSupportSpec.groovy       | 1165 +++++++++++++++++++
 .../testing/http/client/MultipartBodySpec.groovy   |   67 ++
 .../http/client/TestHttpResponseSpec.groovy        |  542 +++++++++
 .../testing/http/client/utils/JsonUtilsSpec.groovy |  159 +++
 .../testing/http/client/utils/XmlUtilsSpec.groovy  |  329 ++++++
 grails-testing-support-mongodb/build.gradle        |    2 +-
 grails-testing-support-views-gson/build.gradle     |    2 +-
 grails-testing-support-web/build.gradle            |    2 +-
 .../grails/testing/web/UrlMappingsUnitTest.groovy  |   10 +
 grails-url-mappings/build.gradle                   |    2 +-
 grails-validation/build.gradle                     |    2 +-
 .../grails/validation/ConstrainedDelegate.groovy   |    7 +
 .../groovy/grails/validation/Validateable.groovy   |   13 +
 .../CommandObjectConstraintGettersSpec.groovy      |   40 +
 .../DefaultASTValidateableHelperSpec.groovy        |    9 +
 .../validation/SerializableValidateableSpec.groovy |   24 +
 .../grails/validation/ValidateableMockSpec.groovy  |   24 +
 .../validation/ValidateableTraitAdHocSpec.groovy   |   14 +
 .../grails/validation/ValidateableTraitSpec.groovy |   14 +
 grails-views-core/build.gradle                     |    2 +-
 grails-views-gson/build.gradle                     |    2 +-
 .../plugin/json/builder/DefaultJsonGenerator.java  |  542 +--------
 .../grails/plugin/json/builder/JsonGenerator.java  |  270 +----
 .../grails/plugin/json/builder/JsonOutput.java     |  268 +----
 .../plugin/json/builder/StreamingJsonBuilder.java  |  800 +-------------
 .../json/converters/InstantJsonConverter.groovy    |    3 +-
 .../json/converters/LocalDateJsonConverter.groovy  |    3 +-
 .../converters/LocalDateTimeJsonConverter.groovy   |    3 +-
 .../json/converters/LocalTimeJsonConverter.groovy  |    3 +-
 .../converters/OffsetDateTimeJsonConverter.groovy  |    3 +-
 .../json/converters/OffsetTimeJsonConverter.groovy |    3 +-
 .../json/converters/PeriodJsonConverter.groovy     |    3 +-
 .../converters/ZonedDateTimeJsonConverter.groovy   |    3 +-
 .../plugin/json/view/JsonViewTemplateEngine.groovy |   30 +-
 .../plugin/json/view/JsonViewWritableScript.groovy |   67 +-
 .../json/view/api/GrailsJsonViewHelper.groovy      |   18 +-
 .../plugin/json/view/api/HalViewHelper.groovy      |   18 +-
 .../grails/plugin/json/view/api/JsonView.groovy    |   38 +-
 .../internal/DefaultGrailsJsonViewHelper.groovy    |   94 +-
 .../view/api/internal/DefaultHalViewHelper.groovy  |  134 +--
 .../api/internal/DefaultJsonApiViewHelper.groovy   |   11 +-
 .../view/api/internal/DefaultJsonViewHelper.groovy |    3 +-
 .../JsonTemplateTypeCheckingExtension.groovy       |    9 +-
 .../json/view/template/JsonViewTemplate.groovy     |   23 +-
 .../grails/plugin/json/view/api/JsonApiSpec.groovy |   21 +
 grails-views-markup/build.gradle                   |    2 +-
 grails-web-boot/build.gradle                       |    2 +-
 grails-web-common/build.gradle                     |    2 +-
 grails-web-core/build.gradle                       |    2 +-
 .../context/GrailsWebApplicationContext.java       |    4 +
 .../web/servlet/context/GrailsConfigUtils.java     |    3 +-
 grails-web-databinding/build.gradle                |    2 +-
 grails-web-mvc/build.gradle                        |    2 +-
 grails-web-url-mappings/build.gradle               |    2 +-
 .../groovy/grails/web/mapping/UrlMappingData.java  |   10 +
 .../grails/web/mapping/DefaultUrlMappingData.java  |    8 +
 .../org/grails/web/mapping/RegexUrlMapping.java    |   24 +-
 .../mvc/AbstractGrailsControllerUrlMappings.groovy |   12 +-
 .../reporting/UrlMappingsReportCommand.groovy      |   21 +-
 .../resources/META-INF/services/grails.factories   |    1 -
 .../UrlMappingsWithGreedyExtensionSpec.groovy      |  203 ++++
 .../LinkGeneratorWithUrlMappingsSpec.groovy        |   13 +
 .../web/mapping/RestfulUrlMappingSpec.groovy       |    6 +
 .../mapping/UrlMappingsWithHttpMethodSpec.groovy   |    6 +
 .../web/mapping/mvc/EncodePathFromURISpec.groovy   |    5 +
 grails-wrapper/build.gradle                        |    2 +-
 ...pe.java => GrailsReleaseNotFoundException.java} |   29 +-
 .../main/java/grails/init/GrailsReleaseType.java   |    4 +-
 .../src/main/java/grails/init/GrailsUpdater.java   |   82 +-
 .../src/main/java/grails/init/GrailsVersion.java   |   26 +-
 .../main/java/grails/init/GrailsWrapperHome.java   |   31 +-
 .../main/java/grails/init/GrailsWrapperRepo.java   |   54 +-
 .../main/java/grails/init/RootMetadataHandler.java |    2 +-
 settings.gradle                                    |  100 +-
 1233 files changed, 66286 insertions(+), 9204 deletions(-)

diff --cc dependencies.gradle
index 735aa33ec9,ecbbca0f2e..cf32aed8f2
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@@ -37,8 -37,7 +37,7 @@@ ext 
              'jna.version'                   : '5.17.0',
              'jquery.version'                : '3.7.1',
              'objenesis.version'             : '3.4',
-             'gradle-spock.version'          : '2.3-groovy-3.0',
 -            'spring-boot.version'           : '3.5.11',
 +            'spring-boot.version'           : '4.0.1',
      ]
  
      // Note: the name of the dependency must be the prefix of the property 
name so properties in the pom are resolved correctly
diff --cc 
grails-core/src/main/groovy/org/grails/compiler/injection/ApplicationClassInjector.groovy
index 094826672f,9279072fb6..aba6d87fe8
--- 
a/grails-core/src/main/groovy/org/grails/compiler/injection/ApplicationClassInjector.groovy
+++ 
b/grails-core/src/main/groovy/org/grails/compiler/injection/ApplicationClassInjector.groovy
@@@ -64,9 -64,30 +64,30 @@@ class ApplicationClassInjector implemen
      public static final List<String> EXCLUDED_AUTO_CONFIGURE_CLASSES = [
              
'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration',
              
'org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration',
 -            
'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration'
 +            
'org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration'
      ]
  
+     /**
+      * Auto-configuration classes that are conditionally excluded when
+      * a specific plugin is detected on the classpath. Each entry maps a
+      * plugin class (checked via {@link ClassUtils#isPresent}) to the
+      * auto-configuration class name to exclude, with an optional system
+      * property that can disable the exclusion.
+      *
+      * <p>The system property defaults to {@code "true"} (exclusion enabled).
+      * Set it to {@code "false"} in {@code gradle.properties} to opt out:</p>
+      * <pre>
+      * systemProp.grails.autoconfigure.exclude.liquibase=false
+      * </pre>
+      */
+     static final List<Map<String, String>> CONDITIONAL_EXCLUSIONS = [
+             [
+                     pluginClass: 
'org.grails.plugins.databasemigration.DatabaseMigrationGrailsPlugin',
+                     excludeClass: 
'org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration',
+                     systemProperty: 'grails.autoconfigure.exclude.liquibase'
+             ]
+     ]
+ 
      ApplicationArtefactHandler applicationArtefactHandler = new 
ApplicationArtefactHandler()
  
      private static final List<Integer> transformedInstances = []
diff --cc 
grails-data-hibernate5/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
index 8057983f69,522ae45193..a4972c5924
--- 
a/grails-data-hibernate5/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
+++ 
b/grails-data-hibernate5/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
@@@ -36,8 -38,10 +38,9 @@@ import org.hibernate.sql.JoinType
  import org.hibernate.type.StandardBasicTypes;
  import org.hibernate.type.Type;
  
 -import org.springframework.orm.hibernate5.SessionHolder;
  import 
org.springframework.transaction.support.TransactionSynchronizationManager;
  
+ import org.grails.datastore.gorm.query.criteria.AbstractDetachedCriteria;
  import org.grails.datastore.mapping.model.PersistentEntity;
  import org.grails.datastore.mapping.query.api.QueryableCriteria;
  import org.grails.orm.hibernate.GrailsHibernateTemplate;
diff --cc 
grails-data-hibernate5/core/src/test/groovy/org/apache/grails/data/hibernate5/core/GrailsDataHibernate5TckManager.groovy
index 6cbf6c35c7,d8666d9414..e71e88bd59
--- 
a/grails-data-hibernate5/core/src/test/groovy/org/apache/grails/data/hibernate5/core/GrailsDataHibernate5TckManager.groovy
+++ 
b/grails-data-hibernate5/core/src/test/groovy/org/apache/grails/data/hibernate5/core/GrailsDataHibernate5TckManager.groovy
@@@ -28,12 -28,15 +28,15 @@@ import org.grails.datastore.mapping.cor
  import org.grails.orm.hibernate.GrailsHibernateTransactionManager
  import org.grails.orm.hibernate.HibernateDatastore
  import org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration
+ import org.grails.datastore.mapping.multitenancy.MultiTenancySettings
+ import 
org.grails.datastore.mapping.multitenancy.resolvers.SystemPropertyTenantResolver
  import org.h2.Driver
  import org.hibernate.SessionFactory
+ import org.hibernate.dialect.H2Dialect
  import org.springframework.beans.factory.DisposableBean
  import org.springframework.context.ApplicationContext
 -import org.springframework.orm.hibernate5.SessionFactoryUtils
 -import org.springframework.orm.hibernate5.SessionHolder
 +import org.grails.orm.hibernate.support.hibernate5.SessionFactoryUtils
 +import org.grails.orm.hibernate.support.hibernate5.SessionHolder
  import org.springframework.transaction.TransactionStatus
  import org.springframework.transaction.support.DefaultTransactionDefinition
  import 
org.springframework.transaction.support.TransactionSynchronizationManager
diff --cc 
grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy
index ad2d8ebc78,701700e0f0..599181c7fa
--- 
a/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy
+++ 
b/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy
@@@ -27,9 -27,10 +27,10 @@@ import org.grails.orm.hibernate.Hiberna
  import org.hibernate.Session
  import org.hibernate.dialect.H2Dialect
  import org.hibernate.resource.jdbc.spi.JdbcSessionOwner
 -import org.springframework.orm.hibernate5.SessionHolder
 +import org.grails.orm.hibernate.support.hibernate5.SessionHolder
  import 
org.springframework.transaction.support.TransactionSynchronizationManager
  import spock.lang.AutoCleanup
+ import spock.util.environment.RestoreSystemProperties
  import spock.lang.Shared
  import spock.lang.Specification
  
diff --cc 
grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
index 719461c9ce,782e1710a6..6c7facb331
--- 
a/grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
+++ 
b/grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
@@@ -27,13 -34,18 +31,20 @@@ import org.springframework.transaction.
  import org.springframework.ui.ModelMap;
  import org.springframework.web.context.request.WebRequest;
  
+ import org.grails.datastore.mapping.core.connections.ConnectionSource;
  import org.grails.orm.hibernate.AbstractHibernateDatastore;
+ import org.grails.orm.hibernate.HibernateDatastore;
+ import org.grails.orm.hibernate.connections.HibernateConnectionSourceSettings;
 +import org.grails.orm.hibernate.support.hibernate5.SessionHolder;
 +import 
org.grails.orm.hibernate.support.hibernate5.support.OpenSessionInViewInterceptor;
  
  /**
-  * Extends the default spring OSIV and doesn't flush the session if it has 
been set
-  * to MANUAL on the session itself.
+  * Extends the default Spring OSIV to support multiple datasources.
+  * <p>
+  * The default datasource's SessionFactory is managed by the parent class.
+  * Additional (non-default) datasource SessionFactories are managed by this
+  * subclass, which opens and closes sessions for each one alongside the
+  * default session.
   *
   * @author Graeme Rocher
   * @since 0.5
diff --cc grails-spring/build.gradle
index 875378a531,21322cb0cd..df049dc440
--- a/grails-spring/build.gradle
+++ b/grails-spring/build.gradle
@@@ -60,11 -61,5 +61,10 @@@ dependencies 
  }
  
  apply {
-     from 
rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle')
      from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle')
 +}
 +
 +// Exclude copied Spring Framework theme classes from checkstyle (deprecated 
legacy code from Spring 6.x)
 +tasks.named('checkstyleMain') {
 +    exclude '**/org/springframework/ui/**'
  }

Reply via email to