From e4c03e9e5a805430fc07692df1fb4d03e5f7f45d Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Sun, 4 Apr 2021 10:44:50 -0500 Subject: [PATCH] Update plugins to support api/implementation Issue gh-9540 --- .../convention/IntegrationTestPlugin.groovy | 4 +- .../ManagementConfigurationPlugin.java | 64 +++++++++++++------ .../TestsConfigurationPlugin.groovy | 2 +- core/spring-security-core.gradle | 2 +- 4 files changed, 50 insertions(+), 22 deletions(-) diff --git a/buildSrc/src/main/groovy/io/spring/gradle/convention/IntegrationTestPlugin.groovy b/buildSrc/src/main/groovy/io/spring/gradle/convention/IntegrationTestPlugin.groovy index 5fda90d74f..720f1b0562 100644 --- a/buildSrc/src/main/groovy/io/spring/gradle/convention/IntegrationTestPlugin.groovy +++ b/buildSrc/src/main/groovy/io/spring/gradle/convention/IntegrationTestPlugin.groovy @@ -54,10 +54,10 @@ public class IntegrationTestPlugin implements Plugin { } project.configurations { integrationTestCompile { - extendsFrom testCompile + extendsFrom testCompile, testImplementation } integrationTestRuntime { - extendsFrom integrationTestCompile, testRuntime + extendsFrom integrationTestCompile, testRuntime, testRuntimeOnly } } diff --git a/buildSrc/src/main/groovy/io/spring/gradle/convention/ManagementConfigurationPlugin.java b/buildSrc/src/main/groovy/io/spring/gradle/convention/ManagementConfigurationPlugin.java index 8631723e3e..e18a378f65 100644 --- a/buildSrc/src/main/groovy/io/spring/gradle/convention/ManagementConfigurationPlugin.java +++ b/buildSrc/src/main/groovy/io/spring/gradle/convention/ManagementConfigurationPlugin.java @@ -1,33 +1,61 @@ package io.spring.gradle.convention; -import org.gradle.api.Action; + +import io.spring.gradle.propdeps.PropDepsPlugin; import org.gradle.api.Plugin; import org.gradle.api.Project; -import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.ConfigurationContainer; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaTestFixturesPlugin; +import org.gradle.api.plugins.PluginContainer; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPublication; +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; /** - * https://github.com/gradle/gradle/issues/7576#issuecomment-434637595 + * Creates a Management configuration that is appropriate for adding a platform to that is not exposed externally. If + * the JavaPlugin is applied, the compileClasspath, runtimeClasspath, testCompileClasspath, and testRuntimeClasspath + * will extend from it. * @author Rob Winch */ public class ManagementConfigurationPlugin implements Plugin { + + public static final String MANAGEMENT_CONFIGURATION_NAME = "management"; + @Override public void apply(Project project) { - Configuration management = project.getConfigurations() - .create("management", new Action() { - @Override - public void execute(Configuration configuration) { - configuration.setCanBeResolved(false); - configuration.setCanBeConsumed(false); - configuration.setDescription("Used for setting Gradle constraints that impact all configurations that can be resolved"); - } + ConfigurationContainer configurations = project.getConfigurations(); + configurations.create(MANAGEMENT_CONFIGURATION_NAME, (management) -> { + management.setVisible(false); + management.setCanBeConsumed(false); + management.setCanBeResolved(false); + + PluginContainer plugins = project.getPlugins(); + plugins.withType(JavaPlugin.class, (javaPlugin) -> { + configurations.getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management); + configurations.getByName(JavaPlugin.COMPILE_CONFIGURATION_NAME).extendsFrom(management); + configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management); + configurations.getByName(JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management); + configurations.getByName(JavaPlugin.TEST_COMPILE_CONFIGURATION_NAME).extendsFrom(management); + configurations.getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management); }); - project.getConfigurations().all(new Action() { - @Override - public void execute(Configuration configuration) { - if (configuration.isCanBeResolved()) { - configuration.extendsFrom(management); - } - } + plugins.withType(JavaTestFixturesPlugin.class, (javaTestFixturesPlugin) -> { + configurations.getByName("testFixturesCompileClasspath").extendsFrom(management); + configurations.getByName("testFixturesRuntimeClasspath").extendsFrom(management); + }); + plugins.withType(MavenPublishPlugin.class, (mavenPublish) -> { + PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); + publishing.getPublications().withType(MavenPublication.class, (mavenPublication -> { + mavenPublication.versionMapping((versions) -> + versions.allVariants(versionMapping -> versionMapping.fromResolutionResult()) + ); + })); + }); + plugins.withType(PropDepsPlugin.class, (propDepsPlugin -> { + configurations.getByName("optional").extendsFrom(management); + configurations.getByName("provided").extendsFrom(management); + })); }); } } + diff --git a/buildSrc/src/main/groovy/io/spring/gradle/convention/TestsConfigurationPlugin.groovy b/buildSrc/src/main/groovy/io/spring/gradle/convention/TestsConfigurationPlugin.groovy index 6ad45d0a1e..99aac80abe 100644 --- a/buildSrc/src/main/groovy/io/spring/gradle/convention/TestsConfigurationPlugin.groovy +++ b/buildSrc/src/main/groovy/io/spring/gradle/convention/TestsConfigurationPlugin.groovy @@ -39,7 +39,7 @@ public class TestsConfigurationPlugin implements Plugin { private void applyJavaProject(Project project) { project.configurations { - tests.extendsFrom testRuntime + tests.extendsFrom testRuntime, testRuntimeClasspath } project.tasks.create('testJar', Jar) { diff --git a/core/spring-security-core.gradle b/core/spring-security-core.gradle index 19a2b42aec..7eb5f611cc 100644 --- a/core/spring-security-core.gradle +++ b/core/spring-security-core.gradle @@ -59,6 +59,6 @@ configure(project.tasks.withType(Test)) { } Callable springVersion() { - return (Callable) { project.configurations.compile.resolvedConfiguration.resolvedArtifacts + return (Callable) { project.configurations.compileClasspath.resolvedConfiguration.resolvedArtifacts .find { it.name == 'spring-core' }.moduleVersion.id.version } }