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)
+            }
         }
     }
 

Reply via email to