@ -26,6 +26,7 @@ import java.util.concurrent.Callable;
import org.gradle.api.Action ;
import org.gradle.api.Plugin ;
import org.gradle.api.Project ;
import org.gradle.api.Task ;
import org.gradle.api.file.FileCollection ;
import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact ;
import org.gradle.api.plugins.ApplicationPlugin ;
@ -145,37 +146,49 @@ final class JavaPluginAction implements PluginApplicationAction {
}
private void configureAdditionalMetadataLocations ( JavaCompile compile ) {
compile . doFirst ( ( task ) - > {
compile . doFirst ( new AdditionalMetadataLocationsConfigurer ( ) ) ;
}
private static class AdditionalMetadataLocationsConfigurer implements Action < Task > {
@Override
public void execute ( Task task ) {
if ( ! ( task instanceof JavaCompile ) ) {
return ;
}
JavaCompile compile = ( JavaCompile ) task ;
if ( hasConfigurationProcessorOnClasspath ( compile ) ) {
findMatchingSourceSet ( compile ) . ifPresent (
( sourceSet ) - > configureAdditionalMetadataLocations ( compile ,
sourceSet ) ) ;
}
} ) ;
}
private Optional < SourceSet > findMatchingSourceSet ( JavaCompile compile ) {
return compile . getProject ( ) . getConvention ( ) . getPlugin ( JavaPluginConvention . class )
. getSourceSets ( ) . stream ( ) . filter ( ( sourceSet ) - > sourceSet
. getCompileJavaTaskName ( ) . equals ( compile . getName ( ) ) )
. findFirst ( ) ;
}
private boolean hasConfigurationProcessorOnClasspath ( JavaCompile compile ) {
Set < File > files = ( compile . getOptions ( ) . getAnnotationProcessorPath ( ) ! = null )
? compile . getOptions ( ) . getAnnotationProcessorPath ( ) . getFiles ( )
: compile . getClasspath ( ) . getFiles ( ) ;
return files . stream ( ) . map ( File : : getName ) . anyMatch (
( name ) - > name . startsWith ( "spring-boot-configuration-processor" ) ) ;
}
}
private boolean hasConfigurationProcessorOnClasspath ( JavaCompile compile ) {
Set < File > files = ( compile . getOptions ( ) . getAnnotationProcessorPath ( ) ! = null )
? compile . getOptions ( ) . getAnnotationProcessorPath ( ) . getFiles ( )
: compile . getClasspath ( ) . getFiles ( ) ;
return files . stream ( ) . map ( File : : getName ) . anyMatch (
( name ) - > name . startsWith ( "spring-boot-configuration-processor" ) ) ;
}
private Optional < SourceSet > findMatchingSourceSet ( JavaCompile compile ) {
return compile
. getProject ( ) . getConvention ( ) . getPlugin ( JavaPluginConvention . class )
. getSourceSets ( ) . stream ( ) . filter ( ( sourceSet ) - > sourceSet
. getCompileJavaTaskName ( ) . equals ( compile . getName ( ) ) )
. findFirst ( ) ;
}
private void configureAdditionalMetadataLocations ( JavaCompile compile ,
SourceSet sourceSet ) {
String locations = StringUtils . collectionToCommaDelimitedString (
sourceSet . getResources ( ) . getSrcDirs ( ) ) ;
compile . getOptions ( ) . getCompilerArgs ( ) . add (
"-Aorg.springframework.boot.configurationprocessor.additionalMetadataLocations="
+ locations ) ;
}
private void configureAdditionalMetadataLocations ( JavaCompile compile ,
SourceSet sourceSet ) {
String locations = StringUtils
. collectionToCommaDelimitedString ( sourceSet . getResources ( ) . getSrcDirs ( ) ) ;
compile . getOptions ( ) . getCompilerArgs ( ) . add (
"-Aorg.springframework.boot.configurationprocessor.additionalMetadataLocations="
+ locations ) ;
}
}