-
-
Notifications
You must be signed in to change notification settings - Fork 970
Upgrade to Gradle 9.3.1 and Micronaut 4 #15365
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 8.0.x
Are you sure you want to change the base?
Conversation
- Update Gradle wrapper to 9.3.1 across grails-core, grails-gradle, build-logic, and profiles - Migrate Groovy dependencies from org.codehaus.groovy to org.apache.groovy (Groovy 4+) - Update Spock version for grails-gradle tests to 2.3-groovy-4.0 - Add explicit groovy.ant.AntBuilder import (moved in Groovy 4) - Make task classes abstract for Gradle 9 compatibility (JavaExec, AbstractCompile) - Add @Inject annotation to task constructors where required - Fix documentation configuration attributes for groovydoc tasks - Update IOUtilsSpec test expectation for Groovy 4 Spock jar name Note: grails-forge remains on Gradle 8.x pending Micronaut 4 upgrade
- Upgrade Micronaut from 3.10.4 to 4.10.7 - Upgrade Groovy from 3.x to 4.0.30 - Upgrade Spock from 2.1-groovy-3.0 to 2.3-groovy-4.0 - Migrate javax.* to jakarta.* validation annotations - Update dependency coordinates from org.codehaus.groovy to org.apache.groovy - Update micronaut-bom to micronaut-platform - Add micronaut-validation-processor for annotation processing - Add micronaut-jackson-databind runtime dependency - Fix deprecated Gradle APIs (conventions -> extensions) - Add ByteBuddy for Spock mocking on Java 17+ - Add JUnit Platform launcher for Gradle 9 test execution - Remove shadow plugin (now provided by micronaut-application plugin)
|
@jamesfredley did Gradle 9 not remove the testClassDir as they said they would? It was my understanding the integration plugin + TCK had to be rewritten similar to the grails-publish project to work. |
|
Replace artifacts { archives ... } with direct task dependencies on
assemble task as recommended by Gradle 9 deprecation warnings.
The remaining StartParameter.isConfigurationCacheRequested deprecation
is from the Asciidoctor Gradle plugin (grolifant library) and cannot
be fixed in this project.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Upgrades the build/tooling stack to Gradle 9.3.1 and updates the grails-forge module family to Micronaut 4 / Groovy 4 / Spock 2.3, including related Gradle API migrations and test-runtime adjustments.
Changes:
- Bump Gradle wrapper/tooling versions to 9.3.1 across the repo and update Gradle plugin/task implementations for Gradle 9 APIs.
- Upgrade
grails-forgeto Micronaut 4 (Groovy 4, Spock 2.3) and migratejavax.*validation/transaction usage tojakarta.*. - Update test infrastructure for Gradle 9 / Java 17+ (JUnit Platform launcher, Byte Buddy, and JVM
--add-opens).
Reviewed changes
Copilot reviewed 55 out of 55 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| grails-profiles/profile/skeleton/gradle/wrapper/gradle-wrapper.properties | Update profile skeleton Gradle wrapper to 9.3.1 |
| grails-profiles/base/skeleton/gradle/wrapper/gradle-wrapper.properties | Update base skeleton Gradle wrapper to 9.3.1 |
| grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/views/markup/MarkupViewCompilerTask.groovy | Make task type abstract for Gradle 9 task instantiation model |
| grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/views/json/GsonViewCompilerTask.groovy | Make task type abstract for Gradle 9 task instantiation model |
| grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/run/GrailsRunTask.groovy | Make task type abstract for Gradle 9 task instantiation model |
| grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/profiles/tasks/ProfileCompilerTask.groovy | Make task type abstract for Gradle 9 task instantiation model |
| grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/commands/ApplicationContextScriptTask.groovy | Make task abstract and add @Inject constructor for Gradle services |
| grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/commands/ApplicationContextCommandTask.groovy | Make task abstract and add @Inject constructor for Gradle services |
| grails-gradle/plugins/build.gradle | Switch Groovy dependency coordinates to org.apache.groovy |
| grails-gradle/model/src/test/groovy/grails/io/IOUtilsSpec.groovy | Update test expectation for Spock Groovy 4 artifact name |
| grails-gradle/model/build.gradle | Switch Groovy deps to org.apache.groovy coordinates (including tests) |
| grails-gradle/gradle/wrapper/gradle-wrapper.properties | Update Gradle wrapper to 9.3.1 |
| grails-gradle/common/build.gradle | Switch Groovy deps to org.apache.groovy coordinates (including tests) |
| grails-gradle/bom/build.gradle | Use Gradle-embedded Groovy BOM via org.apache.groovy:groovy-bom |
| grails-forge/test-core/build.gradle | Switch Groovy dependency coordinates to org.apache.groovy |
| grails-forge/grails-forge-web-netty/build.gradle | Remove explicit Shadow plugin; add Micronaut Jackson databind runtime dep |
| grails-forge/grails-forge-core/src/main/java/org/grails/forge/util/GitHubUtil.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/gradleWrapperProperties.rocker.raw | Update generated wrapper template to Gradle 9.3.1 |
| grails-forge/grails-forge-core/src/main/java/org/grails/forge/client/github/oauth/AccessToken.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-core/build.gradle | Switch to Micronaut platform BOM; update Groovy coords; add validation/Jackson APIs |
| grails-forge/grails-forge-cli/build.gradle | Switch to Micronaut platform BOM; update Groovy coords and resolution strategy |
| grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/DiffClient.groovy | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/diff/DiffOperations.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/diff/DiffController.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/zip/ZipCreateOperation.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/zip/ZipCreateController.java | Add @Validated; migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/github/GitHubRedirectService.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/github/GitHubCreateService.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/github/GitHubCreateOperation.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/github/GitHubCreateController.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/AbstractCreateController.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-api/build.gradle | Switch to Micronaut platform BOM; add validation processor; jakarta inject; Jackson runtime |
| grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Application.java | Migrate validation annotations to jakarta.validation |
| grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/AnalyticsController.java | Migrate transactions to jakarta.transaction |
| grails-forge/grails-forge-analytics-postgres/build.gradle | Remove explicit Shadow plugin; add Micronaut Jackson databind runtime dep |
| grails-forge/gradle/wrapper/gradle-wrapper.properties | Update Gradle wrapper to 9.3.1 |
| grails-forge/gradle/test-config.gradle | Add Gradle 9 test runtime deps + JVM args for Java 17+ |
| grails-forge/gradle/micronaut-openapi-config.gradle | Replace deprecated WriteProperties.outputFile with destinationFile |
| grails-forge/gradle/doc-config.gradle | Switch Groovy documentation deps to org.apache.groovy |
| grails-forge/gradle.properties | Bump Micronaut/Groovy/Spock versions; add Byte Buddy version; update Jakarta inject version |
| grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerSourceSetProperty.java | Replace deprecated Gradle configure util; add DSL delegation helpers |
| grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerPlugin.java | Replace deprecated convention/DSL object usage with JavaPluginExtension + ExtensionAware |
| grails-data-neo4j/docs/build.gradle | Update docs configuration attributes + switch Groovy coords to org.apache.groovy |
| grails-data-mongodb/docs/build.gradle | Update docs configuration attributes for Gradle 9 variant-aware resolution |
| grails-data-hibernate5/docs/build.gradle | Update docs configuration attributes for Gradle 9 variant-aware resolution |
| gradle/wrapper/gradle-wrapper.properties | Update root Gradle wrapper to 9.3.1 |
| gradle.properties | Bump gradleToolingApiVersion to 9.3.1 |
| dependencies.gradle | Bump gradle-spock BOM version to Groovy 4 compatible variant |
| build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/SbomPlugin.groovy | Add license mapping for Coherence BOM 25.03.2 |
| build-logic/gradle/wrapper/gradle-wrapper.properties | Update build-logic Gradle wrapper to 9.3.1 |
| build-logic/docs-core/src/main/groovy/grails/doc/ant/DocPublisherTask.groovy | Add missing AntBuilder import for Groovy/Gradle compatibility |
| build-logic/docs-core/build.gradle | Switch Groovy coords to org.apache.groovy and update Groovy test artifact |
| .sdkmanrc | Update SDKMAN Gradle version to 9.3.1 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
...ugins/src/main/groovy/org/grails/gradle/plugin/commands/ApplicationContextCommandTask.groovy
Outdated
Show resolved
Hide resolved
Update asciidoctor plugin version for consistency across modules. Note: The StartParameter.isConfigurationCacheRequested deprecation warning remains as it's caused by the grolifant library used by asciidoctor-gradle-plugin. This will be fixed in version 5.0.0 (currently in alpha) which upgrades to Grolifant 5.
|
|
I did not touch SBOM in this PR. Grails BOM Dependencies still generates during grails-doc build. |
Fix CodeNarc violations by removing unused Gradle API imports that were left over from refactoring.
|
asciidoctor still results in a deprecation warning, which will be resolved in 5 https://github.com/asciidoctor/asciidoctor-gradle-plugin/releases |
Add explicit dependency on groovydoc task from dist task to satisfy Gradle 9's stricter validation of implicit task dependencies. The dist task uses outputDir (build/docs) which includes the output from the groovydoc task (build/docs/groovydoc), so an explicit dependency is required.
|
All the BOM and build-logic plugins are working correctly:
|
|
The reports in those other tickets claim that they execute but the wrong datasets are returned with gradle 9. I would suggest diffing the output of those files and clearing any local cache before calling this a victory. |
|
grails-bom and /ref/Versions/Grails%20BOM.html have the correct dependencies and versions. |
- Update com.gradle.develocity from 4.1.1 to 4.3.2 (latest compatible with Develocity 2025.4.2) - Update com.gradle.common-custom-user-data-gradle-plugin from 2.3 to 2.4.0 - Migrate grails-data-neo4j and grails-data-graphql from deprecated gradle-enterprise plugin to develocity - Add reproducible build configuration to grails-data-neo4j and grails-data-graphql settings - Add comment documenting known Asciidoctor plugin deprecation (StartParameter.isConfigurationCacheRequested)
Fix deprecated Task.project access at execution time (scheduled for removal in Gradle 10) by capturing project properties at configuration time. Changes: - SbomPlugin: Capture projectName, projectPath, and buildDate at configuration time; refactor pickLicense() to accept these values instead of task reference - PublishPlugin: Capture PublishingExtension at configuration time before doLast block - GrailsGradlePlugin: Capture buildDir at configuration time for buildProperties task; capture antBuilder at configuration time for native2ascii task - GrailsProfileGradlePlugin: Replace project.sync in doLast with Sync task type Tested output before/after changes: - cyclonedxBom: Identical (except expected timestamp/UUID differences) - savePublishedArtifacts: Identical - processProfileResources: Identical - buildProperties: Functionally identical (minor formatting: one less blank line) - grails-doc docs: Identical (verified Grails BOM.html)
3d4c6ea to
480ad17
Compare
Replace deprecated leftShift operator (<<) with modern tasks.register and doLast syntax for Gradle 9+ compatibility.
Update gradle-wrapper.jar, gradlew, and gradlew.bat across all locations: - Main project (gradle/) - build-logic/ - grails-gradle/ - grails-forge/ - grails-forge/grails-forge-core/src/main/resources/gradle/ (template) - grails-profiles/base/skeleton/ (template) - grails-profiles/profile/skeleton/ (template) - grails-shell-cli/src/test/resources/gradle-sample/
Summary
This PR upgrades the Grails build infrastructure to use Gradle 9.3.1 and upgrades the grails-forge module to Micronaut 4.
Changes
Gradle 9.3.1 Upgrade
conventionwithextensionsAPIConfigureUtilwithClosureBackedActionJavaPluginConventionwithJavaPluginExtensionoutputFilewithdestinationFileinWriteProperties.sdkmanrcto reference Gradle 9.3.1Develocity Plugin Update
com.gradle.develocityfrom 4.1.1 to 4.3.2 (latest compatible with Develocity 2025.4.2)com.gradle.common-custom-user-data-gradle-pluginfrom 2.3 to 2.4.0grails-data-neo4jandgrails-data-graphqlfrom deprecatedgradle-enterpriseplugin todevelocitygrails-data-neo4jandgrails-data-graphqlsettingsTask.project Deprecation Fixes
Fix deprecated
Task.projectaccess at execution time (scheduled for removal in Gradle 10) by capturing project properties at configuration time:projectName,projectPath, andbuildDateat configuration time; refactorpickLicense()to accept these values instead of task referencePublishingExtensionat configuration time beforedoLastblockbuildDirat configuration time forbuildPropertiestask; captureantBuilderat configuration time fornative2asciitaskproject.syncindoLastwith properSynctask typeMicronaut 4 Upgrade (grails-forge)
javax.*tojakarta.*validation annotations:javax.validation.constraints.*→jakarta.validation.constraints.*javax.transaction.*→jakarta.transaction.*org.codehaus.groovy→org.apache.groovyio.micronaut:micronaut-bom→io.micronaut.platform:micronaut-platformjavax.inject:javax.inject→jakarta.inject:jakarta.inject-apimicronaut-validation-processorfor annotation processingmicronaut-jackson-databindruntime dependency@Validatedannotation to controllers using validationTest Infrastructure Updates
--add-opens java.base/java.lang=ALL-UNNAMEDJVM arg for test executionTesting
Application Testing
Plugin Output Verification
Verified output before/after Task.project deprecation fixes:
cyclonedxBomsavePublishedArtifactsprocessProfileResourcesbuildPropertiesdocsref/Versions/Grails BOM.htmlverified)Known Deprecation Warnings
The following deprecation warning remains (scheduled for Gradle 10, not blocking):
StartParameter.isConfigurationCacheRequestedfromorg.asciidoctor.jvm.convertplugin (4.0.5)