From d23afea168b8360d08bf296ac2189239ab9db7fc Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 6 Sep 2021 17:19:29 +0100 Subject: [PATCH] Extend optional rather than adding it to existing classpath This allows the attributes configured on compileClasspath and runtimeClasspath to independently influence the variant selection when resolving the optional configuration, allowing it to contribute compile dependencies (JAVA_API) to the former and runtime dependencies (JAVA_RUNTIME) to the latter. Fixes gh-27365 --- .../build/optional/OptionalDependenciesPlugin.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/build/optional/OptionalDependenciesPlugin.java b/buildSrc/src/main/java/org/springframework/build/optional/OptionalDependenciesPlugin.java index f4a51cb0e8b..ec4f8b4b193 100644 --- a/buildSrc/src/main/java/org/springframework/build/optional/OptionalDependenciesPlugin.java +++ b/buildSrc/src/main/java/org/springframework/build/optional/OptionalDependenciesPlugin.java @@ -44,18 +44,14 @@ public class OptionalDependenciesPlugin implements Plugin { @Override public void apply(Project project) { Configuration optional = project.getConfigurations().create("optional"); - optional.attributes((attributes) -> attributes.attribute(Usage.USAGE_ATTRIBUTE, - project.getObjects().named(Usage.class, Usage.JAVA_API))); optional.setCanBeConsumed(false); - optional.setCanBeResolved(true); + optional.setCanBeResolved(false); project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { - SourceSetContainer sourceSets = project.getConvention() - .getPlugin(JavaPluginConvention.class).getSourceSets(); + SourceSetContainer sourceSets = project.getConvention().getPlugin(JavaPluginConvention.class) + .getSourceSets(); sourceSets.all((sourceSet) -> { - sourceSet.setCompileClasspath( - sourceSet.getCompileClasspath().plus(optional)); - sourceSet.setRuntimeClasspath( - sourceSet.getRuntimeClasspath().plus(optional)); + project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName()).extendsFrom(optional); + project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()).extendsFrom(optional); }); }); project.getPlugins().withType(EclipsePlugin.class, (eclipePlugin) -> {