This is an automated email from the ASF dual-hosted git repository. jdaugherty pushed a commit to branch micronaut-fixes in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 0ea0544ccaf6e653779855defdff2ba8f31496ef 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 b8f636df6b..3e7beb0a22 100644 --- a/grails-doc/src/en/guide/upgrading/upgrading60x.adoc +++ b/grails-doc/src/en/guide/upgrading/upgrading60x.adoc @@ -278,6 +278,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 f75be4186f..e853514af7 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 b7c5c5d37d..42e30a1bcd 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 @@ -380,11 +380,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 21daf5750e..1cc41c8611 100644 --- a/grails-micronaut/build.gradle +++ b/grails-micronaut/build.gradle @@ -31,11 +31,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')
