Automatically configure annotation processing in Eclipse

Closes gh-32236
pull/32224/head
Andy Wilkinson 2 years ago
parent 5e24b5a110
commit d1810941e8

@ -25,6 +25,7 @@ ext {
dependencies { dependencies {
checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}" checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}"
implementation(platform("org.springframework:spring-framework-bom:5.3.15")) implementation(platform("org.springframework:spring-framework-bom:5.3.15"))
implementation("com.diffplug.gradle:goomph:3.37.2")
implementation("com.fasterxml.jackson.core:jackson-databind:2.11.4") implementation("com.fasterxml.jackson.core:jackson-databind:2.11.4")
implementation("commons-codec:commons-codec:1.13") implementation("commons-codec:commons-codec:1.13")
implementation("org.apache.maven:maven-embedder:3.6.2") implementation("org.apache.maven:maven-embedder:3.6.2")
@ -91,6 +92,10 @@ gradlePlugin {
id = "org.springframework.boot.optional-dependencies" id = "org.springframework.boot.optional-dependencies"
implementationClass = "org.springframework.boot.build.optional.OptionalDependenciesPlugin" implementationClass = "org.springframework.boot.build.optional.OptionalDependenciesPlugin"
} }
processedAnnotationsPlugin {
id = "org.springframework.boot.processed-annotations"
implementationClass = "org.springframework.boot.build.processors.ProcessedAnnotationsPlugin"
}
starterPlugin { starterPlugin {
id = "org.springframework.boot.starter" id = "org.springframework.boot.starter"
implementationClass = "org.springframework.boot.build.starters.StarterPlugin" implementationClass = "org.springframework.boot.build.starters.StarterPlugin"

@ -57,11 +57,7 @@ public class AutoConfigurationPlugin implements Plugin<Project> {
project.getPlugins().apply(DeployedPlugin.class); project.getPlugins().apply(DeployedPlugin.class);
project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {
project.getPlugins().apply(ConfigurationPropertiesPlugin.class); project.getPlugins().apply(ConfigurationPropertiesPlugin.class);
Configuration annotationProcessors = project.getConfigurations() configureAutoConfigurationAnnotationProcessor(project);
.getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME);
annotationProcessors.getDependencies()
.add(project.getDependencies().project(Collections.singletonMap("path",
":spring-boot-project:spring-boot-tools:spring-boot-autoconfigure-processor")));
project.getTasks().create("autoConfigurationMetadata", AutoConfigurationMetadata.class, (task) -> { project.getTasks().create("autoConfigurationMetadata", AutoConfigurationMetadata.class, (task) -> {
SourceSet main = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets() SourceSet main = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets()
.getByName(SourceSet.MAIN_SOURCE_SET_NAME); .getByName(SourceSet.MAIN_SOURCE_SET_NAME);
@ -74,4 +70,11 @@ public class AutoConfigurationPlugin implements Plugin<Project> {
}); });
} }
private void configureAutoConfigurationAnnotationProcessor(Project project) {
Configuration annotationProcessors = project.getConfigurations()
.getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME);
annotationProcessors.getDependencies().add(project.getDependencies().project(Collections.singletonMap("path",
":spring-boot-project:spring-boot-tools:spring-boot-autoconfigure-processor")));
}
} }

@ -34,6 +34,7 @@ import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.language.base.plugins.LifecycleBasePlugin; import org.gradle.language.base.plugins.LifecycleBasePlugin;
import org.springframework.boot.build.processors.ProcessedAnnotationsPlugin;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
/** /**
@ -76,7 +77,7 @@ public class ConfigurationPropertiesPlugin implements Plugin<Project> {
@Override @Override
public void apply(Project project) { public void apply(Project project) {
project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {
addConfigurationProcessorDependency(project); configureConfigurationPropertiesAnnotationProcessor(project);
disableIncrementalCompilation(project); disableIncrementalCompilation(project);
configureAdditionalMetadataLocationsCompilerArgument(project); configureAdditionalMetadataLocationsCompilerArgument(project);
registerCheckAdditionalMetadataTask(project); registerCheckAdditionalMetadataTask(project);
@ -85,11 +86,12 @@ public class ConfigurationPropertiesPlugin implements Plugin<Project> {
}); });
} }
private void addConfigurationProcessorDependency(Project project) { private void configureConfigurationPropertiesAnnotationProcessor(Project project) {
Configuration annotationProcessors = project.getConfigurations() Configuration annotationProcessors = project.getConfigurations()
.getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME); .getByName(JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME);
annotationProcessors.getDependencies().add(project.getDependencies().project(Collections.singletonMap("path", annotationProcessors.getDependencies().add(project.getDependencies().project(Collections.singletonMap("path",
":spring-boot-project:spring-boot-tools:spring-boot-configuration-processor"))); ":spring-boot-project:spring-boot-tools:spring-boot-configuration-processor")));
project.getPlugins().apply(ProcessedAnnotationsPlugin.class);
} }
private void disableIncrementalCompilation(Project project) { private void disableIncrementalCompilation(Project project) {

@ -0,0 +1,38 @@
/*
* Copyright 2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.build.processors;
import com.diffplug.gradle.eclipse.apt.AptEclipsePlugin;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.plugins.ide.eclipse.model.EclipseModel;
/**
* A plugin for a project that uses one or more annotations processors.
*
* @author Andy Wilkinson
*/
public class ProcessedAnnotationsPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getPlugins().apply(AptEclipsePlugin.class);
project.getExtensions().getByType(EclipseModel.class).synchronizationTasks("eclipseJdtApt", "eclipseJdt",
"eclipseFactorypath");
}
}
Loading…
Cancel
Save