Skip to content

Commit f3f9185

Browse files
authored
Deprecate software model based APIs in dependency management (#34631)
2 parents 3c5a9e6 + 754a72f commit f3f9185

File tree

14 files changed

+115
-107
lines changed

14 files changed

+115
-107
lines changed

platforms/documentation/docs/src/docs/userguide/releases/upgrading/upgrading_version_9.adoc

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ The previous step will help you identify potential problems by issuing deprecati
3737
. Try to run the project and debug any errors using the <<troubleshooting.adoc#troubleshooting, Troubleshooting Guide>>.
3838

3939
[[changes_9.2]]
40-
== Upgrading from 9.1 and earlier
41-
42-
=== Deprecations
40+
== Upgrading from 9.1.0 and earlier
4341

4442
=== Potential breaking changes
4543

@@ -48,6 +46,22 @@ The previous step will help you identify potential problems by issuing deprecati
4846
The incubating `ObjectFactory#dependencyCollector()` method has been removed.
4947
DependencyCollectors can still be instantiated within Gradle <<properties_providers.adoc#managed_types, managed types>>.
5048

49+
=== Deprecations
50+
51+
[[dependency_management_rules]]
52+
==== RuleSource-based dependency management APIs have been deprecated
53+
54+
The link:{javadocPath}/org/gradle/model/RuleSource.html[`RuleSource`]-based dependency management APIs have been deprecated and will be removed in Gradle 10.0.0.
55+
56+
These APIs include:
57+
58+
- link:{javadocPath}/org/gradle/api/artifacts/dsl/ComponentMetadataHandler.html#all(java.lang.Object)[`ComponentMetadataHandler.all(Object)`]
59+
- link:{javadocPath}/org/gradle/api/artifacts/dsl/ComponentMetadataHandler.html#all(java.lang.Object)[`ComponentMetadataHandler.withModule(Object,Object)`]
60+
- link:{javadocPath}/org/gradle/api/artifacts/ComponentSelectionRules.html#all(java.lang.Object)[`ComponentSelectionRules.all(Object)`]
61+
- link:{javadocPath}/org/gradle/api/artifacts/ComponentSelectionRules.html#withModule(java.lang.Object,java.lang.Object)[`ComponentSelectionRules.withModule(Object,Object)`]
62+
63+
Instead of using these APIs, you should use the alternative methods that take a `ComponentMetadataRule` class or an `Action`.
64+
5165
[[changes_9.1.0]]
5266
== Upgrading from 9.0.0 and earlier
5367

platforms/software/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/ivy/ComponentSelectionRulesErrorHandlingIntegTest.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ class ComponentSelectionRulesErrorHandlingIntegTest extends AbstractComponentSel
176176
"""
177177

178178
expect:
179+
executer.expectDocumentedDeprecationWarning("The ComponentSelectionRules.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
179180
fails ':checkDeps'
180181
failureDescriptionStartsWith("A problem occurred evaluating root project")
181182
failure.assertHasFileName("Build file '$buildFile.path'")
@@ -219,6 +220,7 @@ class ComponentSelectionRulesErrorHandlingIntegTest extends AbstractComponentSel
219220
}
220221

221222
then:
223+
executer.expectDocumentedDeprecationWarning("The ComponentSelectionRules.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
222224
fails ':checkDeps'
223225
GradleContextualExecuter.configCache || failure.assertHasDescription("Execution failed for task ':checkDeps'.")
224226
failure.assertHasFileName("Build file '$buildFile.path'")

platforms/software/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/ivy/ComponentSelectionRulesProcessingIntegTest.groovy

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ class ComponentSelectionRulesProcessingIntegTest extends AbstractComponentSelect
474474
}
475475

476476
@ToBeFixedForConfigurationCache(because = "task uses Configuration API")
477-
def "can provide component selection rule as rule source"() {
477+
def "can provide component selection all rule as rule source"() {
478478
buildFile << """
479479
480480
dependencies {
@@ -522,7 +522,60 @@ class ComponentSelectionRulesProcessingIntegTest extends AbstractComponentSelect
522522
}
523523

524524
then:
525+
executer.expectDocumentedDeprecationWarning("The ComponentSelectionRules.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
525526
checkDependencies()
527+
}
528+
529+
@ToBeFixedForConfigurationCache(because = "task uses Configuration API")
530+
def "can provide component selection withModule rule as rule source"() {
531+
buildFile << """
526532
533+
dependencies {
534+
conf "org.utils:api:1.+"
535+
}
536+
537+
def ruleSource = new Select11()
538+
539+
configurations.all {
540+
resolutionStrategy {
541+
componentSelection {
542+
withModule("org.utils:api", ruleSource)
543+
}
544+
}
545+
}
546+
547+
checkDeps.doLast {
548+
def artifacts = configurations.conf.incoming.artifacts.artifacts
549+
assert artifacts.size() == 1
550+
assert artifacts[0].id.componentIdentifier.version == '1.1'
551+
assert ruleSource.candidates == ['1.2', '1.1']
552+
}
553+
554+
class Select11 {
555+
def candidates = []
556+
557+
@Mutate
558+
void select(ComponentSelection selection) {
559+
if (selection.candidate.version != '1.1') {
560+
selection.reject("not 1.1")
561+
}
562+
candidates << selection.candidate.version
563+
}
564+
}
565+
"""
566+
567+
when:
568+
repositoryInteractions {
569+
'org.utils:api' {
570+
expectVersionListing()
571+
'1.1' {
572+
expectResolve()
573+
}
574+
}
575+
}
576+
577+
then:
578+
executer.expectDocumentedDeprecationWarning("The ComponentSelectionRules.withModule(Object,Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
579+
checkDependencies()
527580
}
528581
}

platforms/software/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/rules/ComponentMetadataRulesErrorHandlingIntegrationTest.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ class ComponentMetadataRulesErrorHandlingIntegrationTest extends AbstractHttpDep
155155
"""
156156

157157
expect:
158+
executer.expectDocumentedDeprecationWarning("The ComponentMetadataHandler.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
158159
fails 'checkDeps'
159160
failureDescriptionStartsWith("A problem occurred evaluating root project")
160161
failure.assertHasFileName("Build file '$buildFile.path'")
@@ -184,6 +185,7 @@ class ComponentMetadataRulesErrorHandlingIntegrationTest extends AbstractHttpDep
184185
"""
185186

186187
expect:
188+
executer.expectDocumentedDeprecationWarning("The ComponentMetadataHandler.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
187189
fails 'checkDeps'
188190
resolve.assertFailurePresent(failure)
189191
failure.assertHasFileName("Build file '$buildFile.path'")

platforms/software/dependency-management/src/integTest/groovy/org/gradle/integtests/resolve/rules/ComponentMetadataRulesIntegrationTest.groovy

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ dependencies {
317317
}
318318

319319
then:
320+
executer.expectDocumentedDeprecationWarning("The ComponentMetadataHandler.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
320321
succeeds 'resolve'
321322
}
322323

@@ -400,6 +401,9 @@ dependencies {
400401
}
401402

402403
then:
404+
executer.expectDocumentedDeprecationWarning("The ComponentMetadataHandler.withModule(Object,Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
405+
executer.expectDocumentedDeprecationWarning("The ComponentMetadataHandler.withModule(Object,Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
406+
403407
succeeds 'resolve'
404408
}
405409

@@ -418,9 +422,11 @@ dependencies {
418422
"""
419423

420424
when:
425+
executer.expectDocumentedDeprecationWarning("The ComponentMetadataHandler.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
421426
fails "resolve"
422427

423428
then:
429+
executer.expectDocumentedDeprecationWarning("The ComponentMetadataHandler.all(Object) method has been deprecated. This is scheduled to be removed in Gradle 10. Consult the upgrading guide for further information: https://docs.gradle.org/current/userguide/upgrading_version_9.html#dependency_management_rules")
424430
fails 'resolveConf'
425431
failureDescriptionStartsWith("A problem occurred evaluating root project")
426432
failure.assertHasCause("""Type BadRuleSource is not a valid rule source:

platforms/software/dependency-management/src/main/java/org/gradle/api/internal/artifacts/dsl/DefaultComponentMetadataHandler.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.gradle.internal.action.ConfigurableRule;
4747
import org.gradle.internal.action.DefaultConfigurableRule;
4848
import org.gradle.internal.component.external.model.VariantDerivationStrategy;
49+
import org.gradle.internal.deprecation.DeprecationLogger;
4950
import org.gradle.internal.isolation.IsolatableFactory;
5051
import org.gradle.internal.management.DependencyResolutionManagementInternal;
5152
import org.gradle.internal.reflect.Instantiator;
@@ -173,7 +174,12 @@ public ComponentMetadataHandler all(Closure<?> rule) {
173174
}
174175

175176
@Override
177+
@Deprecated
176178
public ComponentMetadataHandler all(Object ruleSource) {
179+
DeprecationLogger.deprecateMethod(ComponentMetadataHandler.class, "all(Object)")
180+
.willBeRemovedInGradle10()
181+
.withUpgradeGuideSection(9, "dependency_management_rules")
182+
.nagUser();
177183
return addRule(createAllSpecRuleAction(ruleActionAdapter.createFromRuleSource(ComponentMetadataDetails.class, ruleSource)));
178184
}
179185

@@ -188,7 +194,12 @@ public ComponentMetadataHandler withModule(Object id, Closure<?> rule) {
188194
}
189195

190196
@Override
197+
@Deprecated
191198
public ComponentMetadataHandler withModule(Object id, Object ruleSource) {
199+
DeprecationLogger.deprecateMethod(ComponentMetadataHandler.class, "withModule(Object,Object)")
200+
.willBeRemovedInGradle10()
201+
.withUpgradeGuideSection(9, "dependency_management_rules")
202+
.nagUser();
192203
return addRule(createSpecRuleActionForModule(id, ruleActionAdapter.createFromRuleSource(ComponentMetadataDetails.class, ruleSource)));
193204
}
194205

platforms/software/dependency-management/src/main/java/org/gradle/api/internal/artifacts/ivyservice/resolutionstrategy/DefaultComponentSelectionRules.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.gradle.api.internal.notations.ModuleIdentifierNotationConverter;
2929
import org.gradle.api.specs.Spec;
3030
import org.gradle.api.specs.Specs;
31+
import org.gradle.internal.deprecation.DeprecationLogger;
3132
import org.gradle.internal.rules.DefaultRuleActionAdapter;
3233
import org.gradle.internal.rules.DefaultRuleActionValidator;
3334
import org.gradle.internal.rules.RuleAction;
@@ -94,7 +95,12 @@ public ComponentSelectionRules all(Closure<?> closure) {
9495
}
9596

9697
@Override
98+
@Deprecated
9799
public ComponentSelectionRules all(Object ruleSource) {
100+
DeprecationLogger.deprecateMethod(ComponentSelectionRules.class, "all(Object)")
101+
.willBeRemovedInGradle10()
102+
.withUpgradeGuideSection(9, "dependency_management_rules")
103+
.nagUser();
98104
return addRule(createAllSpecRulesAction(ruleActionAdapter.createFromRuleSource(ComponentSelection.class, ruleSource)));
99105
}
100106

@@ -109,7 +115,12 @@ public ComponentSelectionRules withModule(Object id, Closure<?> closure) {
109115
}
110116

111117
@Override
118+
@Deprecated
112119
public ComponentSelectionRules withModule(Object id, Object ruleSource) {
120+
DeprecationLogger.deprecateMethod(ComponentSelectionRules.class, "withModule(Object,Object)")
121+
.willBeRemovedInGradle10()
122+
.withUpgradeGuideSection(9, "dependency_management_rules")
123+
.nagUser();
113124
return addRule(createSpecRuleActionFromId(id, ruleActionAdapter.createFromRuleSource(ComponentSelection.class, ruleSource)));
114125
}
115126

platforms/software/dependency-management/src/main/java/org/gradle/internal/management/DefaultDependencyResolutionManagement.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ public ComponentMetadataHandler all(Closure<?> rule) {
238238
}
239239

240240
@Override
241+
@Deprecated
241242
public ComponentMetadataHandler all(Object ruleSource) {
242243
components(h -> h.all(ruleSource));
243244
return this;
@@ -268,6 +269,7 @@ public ComponentMetadataHandler withModule(Object id, Closure<?> rule) {
268269
}
269270

270271
@Override
272+
@Deprecated
271273
public ComponentMetadataHandler withModule(Object id, Object ruleSource) {
272274
components(h -> h.withModule(id, ruleSource));
273275
return this;

platforms/software/dependency-management/src/main/java/org/gradle/internal/rules/DefaultRuleActionAdapter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public <T> RuleAction<? super T> createFromAction(Action<? super T> action) {
5353
}
5454

5555
@Override
56+
@Deprecated
5657
public <T> RuleAction<? super T> createFromRuleSource(Class<T> subjectType, Object ruleSource) {
5758
try {
5859
return ruleActionValidator.validate(RuleSourceBackedRuleAction.create(ModelType.of(subjectType), ruleSource));

platforms/software/dependency-management/src/main/java/org/gradle/internal/rules/RuleActionAdapter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ public interface RuleActionAdapter {
2424

2525
<T> RuleAction<? super T> createFromAction(Action<? super T> action);
2626

27+
@Deprecated
2728
<T> RuleAction<? super T> createFromRuleSource(Class<T> subjectType, Object ruleSource);
2829
}

0 commit comments

Comments
 (0)