From b93fdfb9553bc1b444de117756adb8c0554b64d8 Mon Sep 17 00:00:00 2001 From: Justin Van Dort Date: Tue, 21 Feb 2023 16:48:00 -0500 Subject: [PATCH] Clear root metadata when adding or removing configurations This ensures when a configuration is removed and added between resolutions, we can clear and subsequently re-calculate updated metadata --- .../AddingConfigurationIntegrationTest.groovy | 27 +++++++++++++++++++ .../DefaultConfigurationContainer.java | 2 ++ 2 files changed, 29 insertions(+) diff --git a/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/api/AddingConfigurationIntegrationTest.groovy b/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/api/AddingConfigurationIntegrationTest.groovy index 0fd1f549b4e6..e83041d7233b 100644 --- a/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/api/AddingConfigurationIntegrationTest.groovy +++ b/subprojects/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/api/AddingConfigurationIntegrationTest.groovy @@ -84,4 +84,31 @@ class AddingConfigurationIntegrationTest extends AbstractIntegrationSpec { expect: succeeds "addConfigs" } + + def "can remove and add configurations between resolutions"() { + given: + mavenRepo.module("org", "foo", "1.0").publish() + + buildFile << """ + repositories { + maven { url '$mavenRepo.uri' } + } + + task resolve { + doLast { + def conf = configurations.create("conf") + conf.dependencies.add(project.dependencies.create("org:foo:1.0")) + conf.files + configurations.remove(conf) + + def conf2 = configurations.create("conf2") + conf2.dependencies.add(project.dependencies.create("org:foo:1.0")) + conf2.files + } + } + """ + + expect: + succeeds("resolve") + } } diff --git a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/configurations/DefaultConfigurationContainer.java b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/configurations/DefaultConfigurationContainer.java index 1c504416e074..68a3dc2cb757 100644 --- a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/configurations/DefaultConfigurationContainer.java +++ b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/configurations/DefaultConfigurationContainer.java @@ -81,6 +81,8 @@ public DefaultConfigurationContainer( }; this.rootComponentMetadataBuilder = rootComponentMetadataBuilderFactory.create(this); this.defaultConfigurationFactory = defaultConfigurationFactory; + this.whenObjectAdded(x -> rootComponentMetadataBuilder.discardAll()); + this.whenObjectRemoved(x -> rootComponentMetadataBuilder.discardAll()); } @Override