From 0ec4be37d591bcc8a3f5ae10ac3daa905599bb84 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 6 Sep 2021 16:21:24 +0100 Subject: [PATCH] Configure optional configuration to consume its dependencies' API Previously, the optional configuration had no usage attribute. This resulted in it using the default, JAVA_RUNTIME, which caused it to only consume the runtime produced by its dependencies and not the API. Given that the optional configuration is added to the compile classpath, this was incorrect. This commit updates the optional configuration to be configured to consume the Java API of its dependencies. The configuration has also been marked as not being for consumption. This prevents other projects attempting to consume the optional variant of a project that has the optional dependencies plugin applied and further aligns it with Gradle's built-in configurations of a similar nature. See gh-27365 --- .../build/optional/OptionalDependenciesPlugin.java | 5 +++++ 1 file changed, 5 insertions(+) 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 93ae77995d..f4a51cb0e8 100644 --- a/buildSrc/src/main/java/org/springframework/build/optional/OptionalDependenciesPlugin.java +++ b/buildSrc/src/main/java/org/springframework/build/optional/OptionalDependenciesPlugin.java @@ -19,6 +19,7 @@ package org.springframework.build.optional; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; +import org.gradle.api.attributes.Usage; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSetContainer; @@ -43,6 +44,10 @@ 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); project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { SourceSetContainer sourceSets = project.getConvention() .getPlugin(JavaPluginConvention.class).getSourceSets();