Upgrade to Spring Boot 4.0.5 and Spring Framework 7.0.6#15541
Upgrade to Spring Boot 4.0.5 and Spring Framework 7.0.6#15541jamesfredley wants to merge 39 commits into8.0.xfrom
Conversation
# 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
The 8.0.x merge reintroduced several items that had been removed or updated for Spring Boot 4 compatibility: - Remove vendored Spring theme files (10 files) already removed by #15457 - Remove theme references from GrailsApplicationContext (ThemeSource, onRefresh, getTheme) - Remove LoaderImplementation import and CLASSIC loader convention from GrailsGradlePlugin (removed in Spring Boot 4) - Add missing SessionFactoryUtils vendored import in GrailsOpenSessionInViewInterceptor - Add spring-boot-hibernate dependency for HibernateJpaAutoConfiguration package relocation in test example Assisted-by: Claude Code <Claude@Claude.ai>
ThemeSource (org.springframework.ui.context.ThemeSource) was removed in Spring Framework 7.0. GrailsWebApplicationContext imported and implemented this interface, causing grails-web-core compilation failure and cascading all downstream CI jobs. Assisted-by: Claude Code <Claude@Claude.ai>
Sort org.springframework imports alphabetically before the grails/org.grails group to satisfy checkstyle ImportOrder rule. Assisted-by: Claude Code <Claude@Claude.ai>
- Update ApplicationClassInjectorSpec to expect relocated HibernateJpaAutoConfiguration class - Use forked SessionHolder in MultiDataSourceSessionSpec - Add missing RestoreSystemProperties import in MongoDB specs - Remove Spring Theme/ThemeSource references deleted in Spring 7 - Add spring-boot-jdbc test dependency for DataSourceAutoConfiguration Assisted-by: Claude Code <Claude@Claude.ai>
Checkstyle requires explicit imports per AvoidStarImport rule. Assisted-by: Claude Code <Claude@Claude.ai>
- Remove unused imports (ObjectProvider, UrlMappings) in UrlMappingsAutoConfiguration to fix checkstyle - Add spring-boot-hibernate test dependency to grails-data-hibernate5 boot-plugin for relocated HibernateJpaAutoConfiguration class - Update spring.data.mongodb.* to spring.mongodb.* in MongoDB boot-plugin test specs (property renamed in Spring Boot 4) - Disable integrationTest for modules using grails-spring-security (app1, app3, exploded, plugins/exploded, mongodb/test-data-service) until plugin is updated for Spring Boot 4 - Disable integrationTest for gsp-sitemesh3 (SiteMesh3 incompatible with Spring Framework 7) - Ignore JSP test in gsp-layout (JSP/theme support removed in Spring Framework 7, see #15457) - Disable groovydoc for micronaut-singleton test plugin to avoid Groovy version conflict (4.0.29 vs 4.0.30 from Micronaut platform) Assisted-by: Claude Code <Claude@Claude.ai>
Adapt AbstractGrailsMockHttpServletResponse to Spring 7 changes in MockHttpServletResponse and restore the previous reset() behavior.
# Conflicts: # grails-testing-support-core/src/main/groovy/org/grails/testing/GrailsApplicationBuilder.groovy # grails-web-boot/src/test/groovy/grails/boot/EmbeddedContainerWithGrailsSpec.groovy
Spring Boot 4.0 moved BootstrapRegistry, BootstrapRegistryInitializer, and ConfigurableBootstrapContext from org.springframework.boot to org.springframework.boot.bootstrap. Update all references and the spring.factories key to use the new package paths. Assisted-by: Claude Code <Claude@Claude.ai>
…elocations DataSourceAutoConfiguration moved from org.springframework.boot.autoconfigure.jdbc to org.springframework.boot.jdbc.autoconfigure and ReactorAutoConfiguration moved from org.springframework.boot.autoconfigure.reactor to org.springframework.boot.reactor.autoconfigure. Update both the source constant and the test expectations. Assisted-by: Claude Code <Claude@Claude.ai>
There was a problem hiding this comment.
Pull request overview
Upgrades Grails Core to Spring Boot 4.0.5 / Spring Framework 7.0.6 and applies the required compatibility changes across core, web, testing, MongoDB, and Hibernate 5.6-jakarta integration (including vendoring removed Spring ORM Hibernate 5 support).
Changes:
- Update build/dependency coordinates, Spring Boot 4 package relocations, and related API migrations (bootstrapping, web server, MVC, MongoDB properties, etc.).
- Remove Spring theme/JSP/theme infrastructure (now removed upstream) and adjust affected tests.
- Vendor Spring ORM Hibernate 5 integration classes into
grails-data-hibernate5to preserve Hibernate 5.6-jakarta support under Spring Framework 7.
Reviewed changes
Copilot reviewed 134 out of 135 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| grails-wrapper/build.gradle | Switch JUnit Platform dependency from runner to suite. |
| grails-web-url-mappings/src/test/groovy/org/grails/web/mapping/DefaultUrlCreatorTests.groovy | Update request character encoding call to avoid ambiguity. |
| grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/servlet/UrlMappingsErrorPageCustomizer.groovy | Update Spring Boot 4 import relocations for error-page customization. |
| grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/mvc/UrlMappingsInfoHandlerAdapter.groovy | Remove obsolete @Override for removed Spring MVC API. |
| grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/mvc/UrlMappingsHandlerMapping.groovy | Update interceptor matching to new Spring MVC API. |
| grails-web-url-mappings/src/main/groovy/grails/web/mapping/ResponseRedirector.groovy | Replace removed/deprecated status constant with FOUND (302). |
| grails-web-url-mappings/build.gradle | Add Boot modularized web-server/servlet compileOnly deps; update JUnit Platform dependency. |
| grails-web-mvc/build.gradle | Update JUnit Platform dependency to suite. |
| grails-web-databinding/build.gradle | Update JUnit Platform dependency to suite. |
| grails-web-core/src/main/groovy/grails/web/servlet/context/GrailsWebApplicationContext.java | Remove Spring theme support interface/notes. |
| grails-web-core/build.gradle | Update JUnit Platform dependency to suite. |
| grails-web-common/src/main/groovy/org/grails/web/config/http/GrailsFilters.java | Replace removed Boot SecurityProperties constant usage with internal constant. |
| grails-web-common/src/main/groovy/org/grails/web/config/http/GrailsFilterOrder.java | Introduce internal filter-order constant for Boot 4 migration. |
| grails-web-common/build.gradle | Update JUnit Platform dependency to suite. |
| grails-web-boot/src/test/groovy/grails/boot/GrailsSpringApplicationSpec.groovy | Ignore embedded server spec pending Boot 4 modularization rework. |
| grails-web-boot/src/test/groovy/grails/boot/EmbeddedContainerWithGrailsSpec.groovy | Ignore embedded container spec pending Boot 4 modularization rework. |
| grails-web-boot/build.gradle | Update JUnit Platform dependency to suite. |
| grails-validation/build.gradle | Update JUnit Platform dependency to suite. |
| grails-url-mappings/src/main/groovy/org/grails/plugins/web/mapping/UrlMappingsAutoConfiguration.java | Simplify error page customizer bean definition for Boot 4 changes. |
| grails-url-mappings/build.gradle | Add Boot servlet API dependency; update JUnit Platform dependency. |
| grails-testing-support-mongodb/build.gradle | Update Testcontainers MongoDB dependency coordinate. |
| grails-testing-support-datamapping/build.gradle | Update JUnit Platform exclusion to suite. |
| grails-testing-support-core/src/main/groovy/org/grails/testing/GrailsApplicationBuilder.groovy | Replace removed Boot servlet app context class; manual annotation processor registration. |
| grails-testing-support-core/build.gradle | Add spring-webmvc; update JUnit Platform dependency to suite. |
| grails-test-suite-uber/src/test/groovy/org/grails/web/servlet/RenderMethodTests.groovy | Modernize/rename Spock tests; improve assertions/messages. |
| grails-test-suite-uber/src/test/groovy/org/grails/web/servlet/mvc/RedirectMethodTests.groovy | Update assertion text/status constant to FOUND (302). |
| grails-test-suite-persistence/build.gradle | Update JUnit Platform dependency to suite. |
| grails-test-suite-base/src/main/groovy/org/grails/support/MockApplicationContext.java | Add getBeanProvider(ParameterizedTypeReference) to match updated Spring APIs. |
| grails-test-suite-base/build.gradle | Update JUnit Platform dependency to suite. |
| grails-test-examples/plugins/micronaut-singleton/build.gradle | Disable groovydoc task for example plugin. |
| grails-test-examples/plugins/exploded/build.gradle | Disable integrationTest due to Spring Security incompatibility under Boot 4. |
| grails-test-examples/mongodb/test-data-service/build.gradle | Update Testcontainers MongoDB dependency coordinate; disable integrationTest for security incompatibility. |
| grails-test-examples/hibernate5/spring-boot-hibernate/src/main/groovy/example/Application.groovy | Update Boot package relocation for Hibernate JPA autoconfig exclusion. |
| grails-test-examples/hibernate5/spring-boot-hibernate/build.gradle | Add Boot autoconfigure/hibernate compileOnly deps for relocation. |
| grails-test-examples/gsp-sitemesh3/build.gradle | Disable integrationTest due to SiteMesh3 incompatibility with Spring 7. |
| grails-test-examples/gsp-layout/src/test/groovy/org/apache/grails/views/gsp/layout/AbstractGrailsTagTests.groovy | Remove theme support usage; swap to GenericWebApplicationContext; reorder imports. |
| grails-test-examples/gsp-layout/src/integration-test/groovy/GrailsLayoutSpec.groovy | Ignore JSP demo test now that JSP support is removed. |
| grails-test-examples/exploded/build.gradle | Disable integrationTest due to Spring Security incompatibility under Boot 4. |
| grails-test-examples/app3/build.gradle | Disable integrationTest due to Spring Security incompatibility under Boot 4. |
| grails-test-examples/app1/build.gradle | Disable integrationTest due to Spring Security incompatibility under Boot 4. |
| grails-test-core/src/main/groovy/org/grails/plugins/testing/AbstractGrailsMockHttpServletResponse.groovy | Adjust reset behavior for Spring mock response internal changes. |
| grails-test-core/build.gradle | Update JUnit Platform dependency to suite. |
| grails-spring/src/main/groovy/org/grails/spring/GrailsApplicationContext.java | Remove deprecated theme support methods/fields. |
| grails-spring/build.gradle | Update JUnit Platform dependency; exclude vendored Spring UI classes from checkstyle. |
| grails-shell-cli/build.gradle | Update JUnit Platform dependency to suite. |
| grails-services/build.gradle | Update JUnit Platform dependency to suite. |
| grails-rest-transforms/build.gradle | Update JUnit Platform dependency to suite. |
| grails-mimetypes/build.gradle | Update JUnit Platform dependency to suite. |
| grails-logging/src/main/groovy/org/grails/compiler/logging/LoggingTransformer.java | Replace Slf4j AST transformation usage with manual logger field injection. |
| grails-logging/build.gradle | Update JUnit Platform dependency to suite. |
| grails-interceptors/build.gradle | Update JUnit Platform dependency to suite. |
| grails-i18n/src/main/groovy/org/grails/plugins/i18n/I18nAutoConfiguration.java | Update Boot package relocation for WebMvc autoconfiguration. |
| grails-i18n/build.gradle | Add boot-webmvc compileOnly; update JUnit Platform dependency. |
| grails-gsp/spring-boot/src/main/java/grails/gsp/boot/GspAutoConfiguration.java | Update Boot package relocation for WebMvc autoconfiguration. |
| grails-gsp/spring-boot/build.gradle | Add boot-webmvc compileOnly dependency. |
| grails-gsp/plugin/src/test/groovy/org/grails/web/taglib/AbstractGrailsTagTests.groovy | Remove theme support usage; swap to GenericWebApplicationContext; reorder imports. |
| grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy | Remove Boot loader implementation configuration (removed in Boot 4). |
| grails-gradle/model/build.gradle | Update JUnit Platform dependency to suite. |
| grails-geb/build.gradle | Update Selenium Testcontainers dependency coordinate. |
| grails-encoder/build.gradle | Update JUnit Platform dependency to suite. |
| grails-domain-class/build.gradle | Update JUnit Platform dependency to suite. |
| grails-datasource/build.gradle | Update JUnit Platform dependency to suite. |
| grails-datamapping-rx/build.gradle | Update JUnit Platform dependency to suite. |
| grails-datamapping-core/src/test/groovy/grails/gorm/annotation/transactions/TransactionalTransformSpec.groovy | Update DefaultTransactionStatus constructor usage for Spring 7 signature. |
| grails-databinding/build.gradle | Update JUnit Platform dependency to suite. |
| grails-databinding-core/build.gradle | Update JUnit Platform dependency to suite. |
| grails-data-neo4j/build.gradle | Update JUnit Platform dependency to suite. |
| grails-data-mongodb/boot-plugin/src/test/groovy/org/grails/datastore/gorm/mongodb/boot/autoconfigure/MongoDbGormAutoConfigureWithGeoSpacialSpec.groovy | Update Boot package relocation and MongoDB property keys. |
| grails-data-mongodb/boot-plugin/src/test/groovy/org/grails/datastore/gorm/mongodb/boot/autoconfigure/MongoDbGormAutoConfigurationSpec.groovy | Update Boot package relocation and MongoDB property keys. |
| grails-data-mongodb/boot-plugin/src/main/groovy/org/grails/datastore/gorm/mongodb/boot/autoconfigure/MongoDbGormAutoConfiguration.groovy | Update Boot package relocation for Mongo auto-config/properties. |
| grails-data-mongodb/boot-plugin/build.gradle | Add new Boot mongodb module dependency for relocated classes. |
| grails-data-hibernate5/grails-plugin/src/test/groovy/org/grails/plugin/hibernate/support/MultiDataSourceSessionSpec.groovy | Switch imports to vendored SessionHolder. |
| grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/HibernatePersistenceContextInterceptor.java | Switch imports to vendored Spring ORM Hibernate 5 utilities. |
| grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java | Switch imports to vendored Spring ORM Hibernate 5 utilities/interceptor. |
| grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy | Switch imports to vendored SessionHolder. |
| grails-data-hibernate5/core/src/test/groovy/org/apache/grails/data/hibernate5/core/GrailsDataHibernate5TckManager.groovy | Switch imports to vendored SessionFactoryUtils/SessionHolder. |
| grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/WithNewSessionAndExistingTransactionSpec.groovy | Switch imports to vendored SessionHolder. |
| grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/validation/BeanValidationSpec.groovy | Replace deprecated Hibernate validator annotation with Jakarta validation. |
| grails-data-hibernate5/core/src/test/groovy/grails/gorm/tests/HibernateOptimisticLockingSpec.groovy | Switch imports to vendored optimistic locking exception. |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/support/OpenSessionInViewInterceptor.java | Vendored Spring ORM OSIV interceptor (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/support/AsyncRequestInterceptor.java | Vendored Spring ORM async request interceptor (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/SpringSessionSynchronization.java | Vendored Spring ORM transaction synchronization (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/SpringSessionContext.java | Vendored Spring ORM current session context (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/SpringJtaSessionContext.java | Vendored Spring ORM JTA session context (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/SpringFlushSynchronization.java | Vendored Spring ORM flush synchronization (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/SpringBeanContainer.java | Vendored Spring ORM bean container integration (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/SessionHolder.java | Vendored Spring ORM SessionHolder (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/SessionFactoryUtils.java | Vendored Spring ORM SessionFactoryUtils (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/LocalSessionFactoryBuilder.java | Vendored Spring ORM SessionFactory builder (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/LocalSessionFactoryBean.java | Vendored Spring ORM SessionFactory FactoryBean (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateTransactionManager.java | Vendored Spring ORM HibernateTransactionManager (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateSystemException.java | Vendored Spring ORM exception type (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateQueryException.java | Vendored Spring ORM exception type (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateOptimisticLockingFailureException.java | Vendored Spring ORM exception type (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateObjectRetrievalFailureException.java | Vendored Spring ORM exception type (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateJdbcException.java | Vendored Spring ORM exception type (Hibernate 5 support). |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateExceptionTranslator.java | Vendored Spring ORM persistence exception translator. |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/HibernateCallback.java | Vendored Spring ORM callback interface. |
| grails-data-hibernate5/core/src/main/java/org/grails/orm/hibernate/support/hibernate5/ConfigurableJtaPlatform.java | Vendored Spring ORM JTA platform adapter. |
| grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/HibernateMappingContextSessionFactoryBean.java | Switch to vendored HibernateExceptionTranslator import. |
| grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy | Switch to vendored SessionHolder import. |
| grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/GrailsSessionContext.java | Switch to vendored Spring ORM session/flush synchronization types. |
| grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/GrailsHibernateTransactionManager.groovy | Switch to vendored HibernateTransactionManager/SessionHolder. |
| grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/GrailsHibernateTemplate.java | Switch to vendored SessionFactoryUtils/SessionHolder. |
| grails-data-hibernate5/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java | Switch to vendored SessionHolder. |
| grails-data-hibernate5/core/build.gradle | Add Spring Web deps; exclude vendored code from checkstyle. |
| grails-data-hibernate5/boot-plugin/src/test/groovy/org/grails/datastore/gorm/boot/autoconfigure/HibernateGormAutoConfigurationSpec.groovy | Remove outdated Boot JDBC imports in spec. |
| grails-data-hibernate5/boot-plugin/src/main/groovy/org/grails/datastore/gorm/boot/autoconfigure/HibernateGormAutoConfiguration.groovy | Update Boot package relocations for datasource/hibernate autoconfig. |
| grails-data-hibernate5/boot-plugin/build.gradle | Add compile/test deps for relocated Boot JDBC/Hibernate modules. |
| grails-data-graphql/examples/spring-boot-app/src/main/groovy/com/example/demo/DemoApplication.groovy | Update Boot package relocation for Hibernate JPA autoconfig exclusion. |
| grails-core/src/test/groovy/org/grails/compiler/injection/ApplicationClassInjectorSpec.groovy | Update expected Boot autoconfiguration class names (new packages). |
| grails-core/src/test/groovy/grails/boot/config/GrailsEnvironmentPostProcessorSpec.groovy | Update bootstrap API import relocation. |
| grails-core/src/main/resources/META-INF/spring.factories | Update BootstrapRegistryInitializer key for Boot 4. |
| grails-core/src/main/groovy/org/grails/compiler/injection/ApplicationClassInjector.groovy | Update excluded Boot autoconfiguration class list to new packages. |
| grails-core/src/main/groovy/org/apache/grails/core/GrailsBootstrapRegistryInitializer.java | Update bootstrap API imports + Javadoc key reference. |
| grails-core/src/main/groovy/grails/config/external/ExternalConfigRunListener.groovy | Update bootstrap API import relocation. |
| grails-core/src/main/groovy/grails/boot/GrailsApp.groovy | Update WebServerApplicationContext import relocation. |
| grails-core/src/main/groovy/grails/boot/config/GrailsEnvironmentPostProcessor.java | Update bootstrap API import relocation. |
| grails-core/build.gradle | Add modularized spring-boot-web-server dependency; update JUnit Platform dependency. |
| grails-converters/build.gradle | Update JUnit Platform dependency to suite. |
| grails-controllers/src/main/groovy/org/grails/plugins/web/controllers/ControllersAutoConfiguration.java | Update Boot package relocations for servlet/webmvc autoconfigure classes. |
| grails-controllers/build.gradle | Add Boot webmvc/servlet modules; update JUnit Platform dependency. |
| grails-console/build.gradle | Update JUnit Platform dependency to suite. |
| grails-common/build.gradle | Update JUnit Platform dependency to suite. |
| grails-codecs/build.gradle | Update JUnit Platform dependency to suite. |
| grails-codecs-core/build.gradle | Update JUnit Platform dependency to suite. |
| grails-bootstrap/build.gradle | Update JUnit Platform dependency to suite. |
| grails-bom/build.gradle | Override Spring Boot groovy.version property to keep Groovy 4.0.x for Grails. |
| dependencies.gradle | Upgrade Spring Boot version and Groovy version; add loader-tools to gradle BOM deps. |
| build.gradle | Force Groovy 4.0.31 artifacts to override Spring Boot’s default Groovy 5. |
| build-logic/docs-core/build.gradle | Update JUnit Platform dependency to suite. |
| AGENTS.md | Update documented Spring Boot/Framework versions. |
| .agents/skills/grails-developer/SKILL.md | Update skill documentation for new Spring Boot/Framework versions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
...n/java/org/grails/orm/hibernate/support/hibernate5/support/OpenSessionInViewInterceptor.java
Show resolved
Hide resolved
grails-web-common/src/main/groovy/org/grails/web/config/http/GrailsFilterOrder.java
Outdated
Show resolved
Hide resolved
grails-web-boot/src/test/groovy/grails/boot/GrailsSpringApplicationSpec.groovy
Outdated
Show resolved
Hide resolved
grails-web-boot/src/test/groovy/grails/boot/EmbeddedContainerWithGrailsSpec.groovy
Outdated
Show resolved
Hide resolved
- Update vendored OpenSessionInViewInterceptor Javadoc @link and @see references to point to the vendored HibernateTransactionManager class instead of the removed org.springframework.orm.hibernate5 package - Clarify GrailsFilterOrder Javadoc to state the concrete value (-100) and cite the original OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER computation instead of referencing an undefined symbol - Clean up GrailsSpringApplicationSpec and EmbeddedContainerWithGrailsSpec to remove commented-out code and placeholder assertions that would silently pass if re-enabled; tests now throw UnsupportedOperationException behind @ignore with TODO markers for Spring Boot 4.0 rework Assisted-by: Claude Code <Claude@Claude.ai>
This comment has been minimized.
This comment has been minimized.
✅ All tests passed ✅🏷️ Commit: f026c56 Learn more about TestLens at testlens.app. |
…d in Spring Boot 3.x
Spring Boot Follow-ups
# Conflicts: # dependencies.gradle
- Add spring-boot-tomcat dependency to forge Tomcat feature for generated apps - Disable Undertow feature (Undertow lacks Servlet 6.1 support for Boot 4) - Add spring-boot-tomcat to gsp-layout test example - Re-enable JSP demo integration test (JSP rendering is independent of removed theme support) Assisted-by: Claude Code <Claude@Claude.ai>
|
We should be able to update the grails-micronaut to support Spring Boot 4: |
|
A NOTICE needs to be added to the spring-orm |
Remove the jackson.version property override and jackson-bom platform dependency from dependencies.gradle. Remove the com.fasterxml.jackson exclusion from the Spring Boot BOM import in grails-bom/build.gradle. Spring Boot 4.0.5 manages both jackson-2-bom (2.x) and jackson-bom (3.x). Grails code uses only com.fasterxml.jackson (2.x), so letting Boot own the version avoids conflicting version management. The groovy.version POM override was already removed in a prior change. Assisted-by: Claude Code <Claude@Claude.ai>
Update AbstractGrailsTagTests in grails-gsp and gsp-layout to use AnnotationConfigServletWebServerApplicationContext at its new Spring Boot 4 package (o.s.b.web.server.servlet.context) instead of the downgrade to GenericWebApplicationContext. Update HibernateJpaAutoConfiguration import in Hibernate docs from o.s.b.autoconfigure.orm.jpa to o.s.b.hibernate.autoconfigure. Update MongoAutoConfiguration exclusion in mongodb gson-templates config from o.s.b.autoconfigure.mongo to o.s.b.mongodb.autoconfigure. Assisted-by: Claude Code <Claude@Claude.ai>
Add META-INF/NOTICE for Spring Framework attribution in the grails-data-hibernate5-spring-orm module. This module vendors classes from Spring Framework 6.2.x that were removed in Spring Framework 7.0. The NOTICE follows the same pattern as other subprojects (grails-events compat, grails-core) and gets packaged into the published jar. Assisted-by: Claude Code <Claude@Claude.ai>
Write 12-section upgrade guide covering all Spring Boot 4 and Spring Framework 7 breaking changes relevant to Grails applications: - Spring Boot autoconfigure modularization - MongoDB configuration property namespace changes - Hibernate ORM package relocations (vendored spring-orm) - HttpStatus.FOUND replacing MOVED_TEMPORARILY - CLASSIC boot loader removal for Micronaut compatibility - Enum serialization default change (SimpleEnumMarshaller) - Theme infrastructure removal in Spring Framework 7 - Embedded server module relocations - HandlerAdapter.getLastModified removal - Spring Security filter ordering changes - Known plugin incompatibilities (spring-security, sitemesh3) Assisted-by: Claude Code <Claude@Claude.ai>
Review Feedback Addressed - Summary of Latest Commits1.
|
Micronaut + Spring Boot 4 Compatibility - Conflicting Issues SummaryThere are several intersecting issues making Micronaut support on Spring Boot 4 challenging. This comment consolidates them for discussion. 1. CLASSIC Boot Loader RemovedSpring Boot 4 removed Status: Removed from 2. Micronaut Platform 5.0.0-M1 Requires JDK 21+The milestone releases that add Spring Boot 4 support have a JDK baseline conflict:
Gradle dependency resolution explicitly rejects the artifact: The relevant releases:
Status: Blocked. Cannot update 3. Micronaut 4.x Does Not Support Spring Boot 4The current Status: 4. Bootstrap Context ChangesSpring Boot 4 moved the bootstrap classes to a new package:
The Micronaut-Spring integration used Status: Grails side updated in Options
|
JSP GrailsLayoutSpec Investigation - Root Cause AnalysisThe FailureThe What Works
What FailsAfter JSP compilation and execution, the response body is empty. Even after removing the Root CauseThe issue is in
In step 4, Why GSP Works But JSP Doesn'tGSP views write directly to the Fix RequiredThis needs a fix in ImpactOnly JSP view rendering through the Grails layout pipeline is affected. Pure GSP views, REST responses, and direct |
Jackson 3.x Migration AssessmentCan Grails move to Jackson 3.x (tools.jackson:jackson-bom:3.1.0)?No - not feasible at this time. Why NotJackson 3.x is a breaking release that changed both Maven coordinates and Java package names:
Impact on GrailsDirect
But the real blocker is the transitive ecosystem:
Switching to Jackson 3.x would require:
Current State (Correct)Spring Boot 4.0.5 manages both Jackson versions:
After removing Grails' jackson override (commit RecommendationWait for Spring Framework and the broader ecosystem to complete their Jackson 3.x migration before attempting this in Grails. Track the Spring Boot Jackson 3.x migration progress at the Spring Boot issue tracker. |
|
Micronaut is not the only library requiring Java 21 - https://github.com/google/closure-compiler is used by the Asset Pipeline and from a security perspective, we should just require 21 for that alone. |
Tomcat 11 (Jakarta Servlet 6.1) calls finish() on the underlying response after a RequestDispatcher.forward() completes, which commits the real response and prevents the layout decorator from writing the decorated output. JSP views rendered through JstlView use forward(), while GSP views write directly to the buffer and are unaffected. Fix: override isCommitted() in GrailsContentBufferingResponse to always return true, forcing Spring's InternalResourceView to use include() instead of forward() for JSP dispatch. Include does not trigger Tomcat's response finish, so the original response stays uncommitted and the layout decorator can write decorated content. Also override reset() and resetBuffer() in GrailsPageResponseWrapper to prevent Tomcat from clearing the content type activation state or the internal content buffer during dispatch processing. Assisted-by: Claude Code <Claude@Claude.ai>
JSP Layout Rendering Fix -
|
…olchain Micronaut 5.x requires JDK 21+. Update micronautPlatformVersion from 4.9.2 to 5.0.0-M1, bringing micronaut-core 5.0.0-M20 and micronaut-spring 6.0.0-M1 which adds Spring Boot 4 compatibility. Configure grails-micronaut and all Micronaut-dependent test example modules to use Gradle JDK 21 toolchain for compilation. The AST transforms from micronaut-inject-groovy are compiled as JDK 21 bytecode and require a JDK 21 compiler. Gradle auto-detects installed JDKs and uses JDK 21 for these modules while the rest of the build stays on JDK 17. Modules updated with JDK 21 toolchain: - grails-micronaut - grails-test-examples/micronaut - grails-test-examples/micronaut-groovy-only - grails-test-examples/issue-11767 - grails-test-examples/plugins/issue-11767 - grails-test-examples/plugins/micronaut-singleton Known issue: asset-pipeline throws NPE on JDK 21 in the micronaut test example (pre-existing asset-pipeline compatibility issue, not related to Micronaut upgrade). Assisted-by: Claude Code <Claude@Claude.ai>
Known Issue: asset-pipeline NPE on JDK 21The This is a pre-existing asset-pipeline compatibility issue with JDK 21, not related to the Micronaut 5 upgrade. The Micronaut test app itself compiles and runs correctly - only the asset compilation step fails. The other Micronaut-dependent modules ( This should be tracked and fixed in the asset-pipeline plugin ( |
Disable groovydoc for Micronaut modules since the Groovydoc task does not support Gradle toolchains and fails when loading JDK 21 bytecode on a JDK 17 Gradle daemon. Add coherence-bom 25.03.2 to SbomPlugin license mapping (UPL-1.0) for the CycloneDX SBOM generation that comes in via Micronaut 5 transitives. Disable asset-pipeline compilation on the micronaut test example due to a pre-existing NPE in asset-pipeline on JDK 21. Set DuplicatesStrategy.EXCLUDE on the issue-11767 plugin jar to handle duplicate spring-configuration-metadata.json from Micronaut annotation processors running in both Java and Groovy compilation outputs. Assisted-by: Claude Code <Claude@Claude.ai>
…g Boot 4 Fix Groovy type coercion in _table.gsp where the modulo operator on the loop status variable could fail in newer Groovy/GSP rendering, causing the table to not render at all. This fixes the scaffolding ValidationFunctionalSpec 'Edit with valid data' Geb timeout. Update SpringBootSpec to assert that Undertow servlet implementation is unavailable with Spring Boot 4, which dropped Undertow support. Assisted-by: Claude Code <Claude@Claude.ai>
|
I've released https://github.com/wondrify/asset-pipeline/releases/tag/rel-5.1.0-M3 to support Java 21 as a baseline. |
0a3a509 to
4da5513
Compare
|
Note: we did NOT import the hibernate5 code from spring here: https://github.com/spring-projects/spring-framework/tree/6.2.x/spring-orm/src/main/java/org/springframework/orm/hibernate5/support I think it's ok (We don't seem to have used it), but I'm putting it here for reference. |
jdaugherty
left a comment
There was a problem hiding this comment.
The only outstanding question I have is the micronaut / asset pipeline updates to Java 21. The toolchain work doesn't appear to function locally:
Caused by: java.lang.UnsupportedClassVersionError: io/micronaut/ast/groovy/InjectTransform has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
Summary
This PR upgrades Grails Core to Spring Boot 4.0.5 and Spring Framework 7.0.6, bringing major framework updates, compatibility fixes, and Micronaut 5 support.
This PR uses Groovy 4.0.x and Hibernate 5.6-jakarta, since work on Groovy 5 and Hibernate 7.2 is progressing on other branches.
Includes merge from 8.0.x branch (7.0.x/7.1.x merge-ups, PluginDiscovery system, deprecations, new
grails-testing-support-http-clientmodule,@CompileStatictag lib support,DatabaseCleanupannotation inheritance, functional test migrations)Dependency Upgrades
Key Changes
Spring Boot 4 / Spring Framework 7 Migration
spring-boot-webmvc,spring-boot-servlet,spring-boot-mongodbspring.data.mongodb.*tospring.mongodb.*HttpStatus.MOVED_TEMPORARILYreplaced withHttpStatus.FOUNDHandlerAdapter.getLastModified()removedorg.springframework.boot.bootstrappackageSpring Boot 4 Class Relocations
AnnotationConfigServletWebServerApplicationContexto.s.b.web.servlet.contexto.s.b.web.server.servlet.contextAnnotationConfigServletWebApplicationContexto.s.b.web.servlet.contexto.s.b.web.context.servletMongoAutoConfigurationo.s.b.autoconfigure.mongoo.s.b.mongodb.autoconfigureHibernateJpaAutoConfigurationo.s.b.autoconfigure.orm.jpao.s.b.hibernate.autoconfigureTomcatServletWebServerFactoryo.s.b.web.embedded.tomcato.s.b.tomcat.servletBootstrapRegistryInitializero.s.bo.s.b.bootstrapVendored Spring ORM Hibernate 5
org.springframework.orm.hibernate5package entirelygrails-data-hibernate5-spring-ormsubprojectorg.grails.orm.hibernate.support.hibernate5Tomcat 11 Compatibility - JSP Layout Fix
finish()on the response afterRequestDispatcher.forward(), committing the response before the layout decorator can writeGrailsContentBufferingResponse.isCommitted()returnstrueto forceInternalResourceViewto useinclude()instead offorward()reset()/resetBuffer()overrides inGrailsPageResponseWrapperto prevent Tomcat from clearing buffer state during dispatchMicronaut 5.0.0-M1 with JDK 21 Toolchain
micronautPlatformVersionfrom 4.9.2 to 5.0.0-M1 (Spring Boot 4 compatible)grails-micronautand all Micronaut-dependent test modules use Gradle JDK 21 toolchainBOM / Dependency Management
jackson.versionoverride fromdependencies.gradle- Spring Boot 4 manages both Jackson 2.x and 3.xgroovy.versionPOM override fromgrails-bom- reverted to historical 7.0.x behaviorcom.fasterxml.jacksonexclusion from Spring Boot BOM importTest Fixes
AbstractGrailsTagTeststo useAnnotationConfigServletWebServerApplicationContextat new SB4 package_table.gsptemplate Groovy type coercion in modulo expression (fixes scaffolding functional tests)SpringBootSpec- Undertow servlet is unavailable in Spring Boot 4UrlMappingsAutoConfigurationsimplification per review discussionDocumentation
upgrading80x.adoc) covering all breaking changesHibernateJpaAutoConfigurationpackageMongoAutoConfigurationpackageKnown Issues
grails-test-examples/micronautmodule'sassetCompiletask throws NPE on JDK 21 (pre-existing asset-pipeline compatibility issue)./gradlew buildin generated apps (environment-dependent, not a code issue)tools.jacksonnot feasible until Spring ecosystem completes their migration (assessed and documented in PR comments)Files Changed
212 files changed, 7181 insertions, 512 deletions