This is an automated email from the ASF dual-hosted git repository. jamesfredley pushed a commit to branch micronaut-fixes-2 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 6fd254b99dafb064abcf02d2defa1f8b6893b46e Author: James Fredley <[email protected]> AuthorDate: Thu Feb 19 00:52:09 2026 -0500 fix: configure Micronaut annotation processor and CLASSIC loader in GrailsGradlePlugin Add Java annotation processor (micronaut-inject-java) for projects using grails-micronaut so that Java @Singleton beans generate proper BeanDefinitionReference classes at compile time. Groovy sources continue to use the existing micronaut-inject-groovy AST transforms. Configure bootJar and bootWar tasks to use LoaderImplementation.CLASSIC as a convention default when Micronaut support is detected. The new Spring Boot 3.2+ default loader is incompatible with Micronaut-Spring's classpath scanning, causing NoClassDefFoundError at runtime when running via java -jar. Fixes #15207 Fixes #15211 Assisted-by: Claude Code <[email protected]> --- .../gradle/plugin/core/GrailsGradlePlugin.groovy | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy index 3ec25ee490..6728ce7302 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy @@ -71,7 +71,10 @@ import org.springframework.boot.gradle.dsl.SpringBootExtension import org.springframework.boot.gradle.plugin.ResolveMainClassName import org.springframework.boot.gradle.plugin.SpringBootPlugin import org.springframework.boot.gradle.tasks.bundling.BootArchive +import org.springframework.boot.gradle.tasks.bundling.BootJar +import org.springframework.boot.gradle.tasks.bundling.BootWar import org.springframework.boot.gradle.tasks.run.BootRun +import org.springframework.boot.loader.tools.LoaderImplementation import javax.inject.Inject @@ -375,6 +378,23 @@ class GrailsGradlePlugin extends GroovyPlugin { } } } + + // Add Micronaut annotation processor for Java source files. + // Groovy sources are handled by micronaut-inject-groovy AST transforms (via compileOnlyApi), + // but Java sources require the Java annotation processor to generate BeanDefinition classes. + // The annotationProcessor configuration only affects compileJava tasks, not compileGroovy. + project.logger.info('Adding Micronaut annotationProcessor for Java sources in {}', project.name) + project.getDependencies().add('annotationProcessor', project.dependencies.platform("io.micronaut.platform:micronaut-platform:$micronautPlatformVersion")) + project.getDependencies().add('annotationProcessor', 'io.micronaut:micronaut-inject-java') + project.getDependencies().add('annotationProcessor', 'jakarta.annotation:jakarta.annotation-api') + + project.logger.info('Configuring CLASSIC boot loader for Micronaut compatibility in {}', project.name) + project.tasks.withType(BootJar).configureEach { BootJar bootJar -> + bootJar.loaderImplementation.convention(LoaderImplementation.CLASSIC) + } + project.tasks.withType(BootWar).configureEach { BootWar bootWar -> + bootWar.loaderImplementation.convention(LoaderImplementation.CLASSIC) + } } }
