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

sbglasius pushed a commit to branch micronaut-fixes
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 32ac3863a540070dec055b23092403f6a4ea9fad
Author: James Daugherty <[email protected]>
AuthorDate: Wed Nov 19 08:41:45 2025 -0500

    prevent duplicate loading of micronaut beans & fix bootJar task
---
 .../src/en/guide/upgrading/upgrading60x.adoc       |  2 ++
 .../build/gradle/templates/buildGradle.rocker.raw  |  9 ++++++-
 .../micronaut/GrailsMicronautValidator.java        | 28 ++++++++++++++++++++++
 .../gradle/plugin/core/GrailsGradlePlugin.groovy   |  5 ----
 grails-micronaut/build.gradle                      |  3 +--
 .../micronaut/GrailsMicronautGrailsPlugin.groovy   | 11 ++++-----
 6 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/grails-doc/src/en/guide/upgrading/upgrading60x.adoc 
b/grails-doc/src/en/guide/upgrading/upgrading60x.adoc
index 5466d8e2f9..98cfe75af3 100644
--- a/grails-doc/src/en/guide/upgrading/upgrading60x.adoc
+++ b/grails-doc/src/en/guide/upgrading/upgrading60x.adoc
@@ -371,6 +371,8 @@ Here's an example `gradle.properties` file:
 micronautPlatformVersion=4.9.2
 ----
 
+Please note that due to 
https://github.com/micronaut-projects/micronaut-spring/issues/769[this issue], 
Spring Boot Dev tools does not work with the micronaut integration.
+
 ===== 12.5 hibernate-ehcache
 
 The `org.hibernate:hibernate-ehcache` library is no longer provided by the 
`org.apache.grails:grails-hibernate5` plugin. If
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw
index a1b84c1858..8c576ee35c 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw
@@ -98,7 +98,7 @@ repositories {
 compileJava.options.release = @features.getTargetJdk()
 
 @if (features.contains("jrebel")) {
-bootRun {
+tasks.named('bootRun') {
     dependsOn(generateRebel)
     if (project.hasProperty("rebelAgent")) {
         jvmArgs(rebelAgent)
@@ -107,6 +107,13 @@ bootRun {
 
 }
 
+@if (features.contains("grails-micronaut")) {
+tasks.named('bootJar') {
+    loaderImplementation = 
org.springframework.boot.loader.tools.LoaderImplementation.CLASSIC
+}
+
+}
+
 @if (features.contains("spock")) {
 tasks.withType(Test).configureEach {
     useJUnitPlatform()
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/micronaut/GrailsMicronautValidator.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/micronaut/GrailsMicronautValidator.java
new file mode 100644
index 0000000000..ffa30aae64
--- /dev/null
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/micronaut/GrailsMicronautValidator.java
@@ -0,0 +1,28 @@
+package org.grails.forge.feature.micronaut;
+
+import jakarta.inject.Singleton;
+import org.grails.forge.application.ApplicationType;
+import org.grails.forge.feature.Feature;
+import org.grails.forge.feature.reloading.SpringBootDevTools;
+import org.grails.forge.feature.validation.FeatureValidator;
+import org.grails.forge.options.Options;
+
+import java.util.Set;
+
+@Singleton
+public class GrailsMicronautValidator implements FeatureValidator {
+    @Override
+    public void validatePreProcessing(Options options, ApplicationType 
applicationType, Set<Feature> features) {
+        if (features.stream().anyMatch(f -> f instanceof GrailsMicronaut)) {
+            if (features.stream().anyMatch(f -> (f instanceof 
SpringBootDevTools))) {
+                // TODO: 
https://github.com/micronaut-projects/micronaut-spring/issues/769
+                throw new IllegalArgumentException("Spring Boot Dev Tools are 
not supported with Grails Micronaut");
+            }
+        }
+    }
+
+    @Override
+    public void validatePostProcessing(Options options, ApplicationType 
applicationType, Set<Feature> features) {
+
+    }
+}
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 123a2b76d3..3ec25ee490 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
@@ -375,11 +375,6 @@ class GrailsGradlePlugin extends GroovyPlugin {
                     }
                 }
             }
-
-            project.logger.info('Adding Micronaut annotationProcessor 
dependencies to project {}', 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')
         }
     }
 
diff --git a/grails-micronaut/build.gradle b/grails-micronaut/build.gradle
index 84693f1dc6..149838b95b 100644
--- a/grails-micronaut/build.gradle
+++ b/grails-micronaut/build.gradle
@@ -33,11 +33,10 @@ group = 'org.apache.grails'
 dependencies {
     compileOnlyApi 
platform("io.micronaut.platform:micronaut-platform:$micronautPlatformVersion")
     compileOnlyApi 'io.micronaut:micronaut-inject-groovy'
-    compileOnlyApi 'io.micronaut:micronaut-inject-java'
 
+    // Use the micronaut spring starter so that any bean in the spring context 
will be exposed to micronaut
     api 
platform("io.micronaut.platform:micronaut-platform:$micronautPlatformVersion")
     api 'io.micronaut.spring:micronaut-spring-boot-starter'
-    api 'io.micronaut.spring:micronaut-spring-context'
 
     // For the grails plugin interface
     compileOnly platform(project(':grails-bom'))
diff --git 
a/grails-micronaut/src/main/groovy/org/apache/grails/micronaut/GrailsMicronautGrailsPlugin.groovy
 
b/grails-micronaut/src/main/groovy/org/apache/grails/micronaut/GrailsMicronautGrailsPlugin.groovy
index 08810ab0a6..2e78177ebd 100644
--- 
a/grails-micronaut/src/main/groovy/org/apache/grails/micronaut/GrailsMicronautGrailsPlugin.groovy
+++ 
b/grails-micronaut/src/main/groovy/org/apache/grails/micronaut/GrailsMicronautGrailsPlugin.groovy
@@ -19,16 +19,15 @@
 
 package org.apache.grails.micronaut
 
+import grails.plugins.GrailsPlugin
 import groovy.transform.CompileStatic
 import groovy.util.logging.Slf4j
 
-import io.micronaut.context.ConfigurableApplicationContext
-import io.micronaut.context.env.AbstractPropertySourceLoader
-import io.micronaut.context.env.PropertySource
-
-import grails.plugins.GrailsPlugin
 import grails.plugins.GrailsPluginManager
 import grails.plugins.Plugin
+import io.micronaut.context.ApplicationContext
+import io.micronaut.context.env.AbstractPropertySourceLoader
+import io.micronaut.context.env.PropertySource
 
 @Slf4j
 @CompileStatic
@@ -53,7 +52,7 @@ class GrailsMicronautGrailsPlugin extends Plugin {
             throw new IllegalStateException('A Micronaut Application Context 
should exist prior to the loading of the Grails Micronaut plugin.')
         }
 
-        def micronautContext = 
applicationContext.getBean('micronautApplicationContext', 
ConfigurableApplicationContext)
+        def micronautContext = 
applicationContext.getBean('micronautApplicationContext', ApplicationContext)
         def micronautEnv = micronautContext.environment
 
         log.debug('Loading configurations from the plugins to the parent 
Micronaut context')

Reply via email to