Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@ import java.nio.charset.StandardCharsets
import java.util.concurrent.atomic.AtomicBoolean

import groovy.transform.CompileStatic
import groovy.transform.TypeCheckingMode

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.bundling.AbstractArchiveTask
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.compile.GroovyCompile
Expand All @@ -54,6 +56,7 @@ class CompilePlugin implements Plugin<Project> {
configureJavaVersion(project)
configureJars(project)
configureCompiler(project)
configureAnnotationProcessors(project)
configureReproducible(project)
}

Expand Down Expand Up @@ -111,6 +114,33 @@ class CompilePlugin implements Plugin<Project> {
}
}

@CompileStatic(TypeCheckingMode.SKIP)
private static void configureAnnotationProcessors(Project project) {
// Configure Spring Boot configuration processor for modules with @ConfigurationProperties.
// Groovy modules intentionally avoid annotation processors due to incompatibility
// with incremental Groovy compilation (see issue #15211).
// Modules must opt-in via 'enableAnnotationProcessor = true' property.
Comment on lines +120 to +122
project.afterEvaluate {
try {
// Check if this module has opted in to annotation processor support
def ext = project.extensions.extraProperties
def enableProcessor = ext.has('enableAnnotationProcessor') && ext.get('enableAnnotationProcessor') == true

Comment on lines +127 to +128
if (enableProcessor) {
// Add annotation processor dependencies for modules with @ConfigurationProperties
project.configurations.getByName('annotationProcessor').dependencies.add(
project.dependencies.platform(project.project(':grails-bom'))
)
project.configurations.getByName('annotationProcessor').dependencies.add(
project.dependencies.create('org.springframework.boot:spring-boot-configuration-processor')
)
}
} catch (Exception ignored) {
// Configuration not available for this module
}
Comment on lines +124 to +140
}
}

private static void configureReproducible(Project project) {
project.tasks.withType(Javadoc).configureEach { Javadoc it ->
def options = it.options as StandardJavadocDocletOptions
Expand Down
2 changes: 2 additions & 0 deletions grails-databinding/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ plugins {
version = projectVersion
group = 'org.apache.grails'

ext.enableAnnotationProcessor = true

dependencies {

implementation platform(project(':grails-bom'))
Expand Down
Loading