21
21
import java .util .List ;
22
22
import java .util .Map ;
23
23
import java .util .Set ;
24
- import java .util .function .Supplier ;
25
24
import java .util .stream .Collectors ;
26
25
26
+ import org .gradle .api .DefaultTask ;
27
27
import org .gradle .api .Plugin ;
28
28
import org .gradle .api .Project ;
29
- import org .gradle .api .Task ;
30
29
import org .gradle .api .artifacts .Configuration ;
31
30
import org .gradle .api .artifacts .ModuleVersionIdentifier ;
31
+ import org .gradle .api .plugins .JavaBasePlugin ;
32
+ import org .gradle .api .tasks .TaskAction ;
32
33
import org .gradle .api .tasks .TaskProvider ;
33
34
34
35
public class VerifyDependenciesVersionsPlugin implements Plugin <Project > {
35
36
36
37
@ Override
37
38
public void apply (Project project ) {
38
- TaskProvider <Task > provider = project .getTasks ().register ("verifyDependenciesVersions" , ( verifyDependenciesVersionsTask ) -> {
39
- verifyDependenciesVersionsTask .setGroup ("Verification" );
40
- verifyDependenciesVersionsTask .setDescription ("Verify that specific dependencies are using the same version" );
39
+ TaskProvider <VerifyDependenciesVersionsTask > verifyDependenciesVersionsTaskProvider = project .getTasks ().register ("verifyDependenciesVersions" , VerifyDependenciesVersionsTask . class , ( task ) -> {
40
+ task .setGroup ("Verification" );
41
+ task .setDescription ("Verify that specific dependencies are using the same version" );
41
42
List <Configuration > allConfigurations = new ArrayList <>();
42
43
allConfigurations .addAll (getConfigurations (project ));
43
44
allConfigurations .addAll (getSubprojectsConfigurations (project .getSubprojects ()));
44
- verifyDependenciesVersionsTask .getInputs ().property ("dependenciesVersions" , new DependencySupplier (allConfigurations ));
45
- verifyDependenciesVersionsTask .doLast ((task ) -> {
46
- DependencySupplier dependencies = (DependencySupplier ) task .getInputs ().getProperties ().get ("dependenciesVersions" );
47
- Map <String , List <Artifact >> artifacts = dependencies .get ();
48
- List <Artifact > oauth2OidcSdk = artifacts .get ("oauth2-oidc-sdk" );
49
- List <Artifact > nimbusJoseJwt = artifacts .get ("nimbus-jose-jwt" );
50
- if (oauth2OidcSdk .size () > 1 ) {
51
- throw new IllegalStateException ("Found multiple versions of oauth2-oidc-sdk: " + oauth2OidcSdk );
52
- }
53
- Artifact oauth2OidcSdkArtifact = oauth2OidcSdk .get (0 );
54
- String nimbusJoseJwtVersion = TransitiveDependencyLookupUtils .lookupJwtVersion (oauth2OidcSdkArtifact .version ());
55
- List <Artifact > differentVersions = nimbusJoseJwt .stream ()
56
- .filter ((artifact ) -> !artifact .version ().equals (nimbusJoseJwtVersion ))
57
- .filter ((artifact -> !artifact .configurationName ().contains ("spring-security-cas" ))) // CAS uses a different version
58
- .toList ();
59
- if (!differentVersions .isEmpty ()) {
60
- String message = "Found transitive nimbus-jose-jwt version [" + nimbusJoseJwtVersion + "] in oauth2-oidc-sdk " + oauth2OidcSdkArtifact
61
- + ", but the project contains a different version of nimbus-jose-jwt " + differentVersions
62
- + ". Please align the versions of nimbus-jose-jwt." ;
63
- throw new IllegalStateException (message );
64
- }
65
- });
45
+ task .setConfigurations (allConfigurations );
66
46
});
67
- project .getTasks ().getByName ( "build" ). dependsOn (provider );
47
+ project .getTasks ().named ( JavaBasePlugin . CHECK_TASK_NAME , checkTask -> checkTask . dependsOn (verifyDependenciesVersionsTaskProvider ) );
68
48
}
69
49
70
50
private List <Configuration > getConfigurations (Project project ) {
@@ -86,20 +66,34 @@ private List<Configuration> getSubprojectsConfigurations(Set<Project> subproject
86
66
return subprojectConfigurations ;
87
67
}
88
68
89
- private record Artifact (String name , String version , String configurationName ) {
90
- }
69
+ public static class VerifyDependenciesVersionsTask extends DefaultTask {
91
70
92
- private static final class DependencySupplier implements Supplier < Map < String , List <Artifact >>> {
71
+ private List <Configuration > configurations ;
93
72
94
- private final List <Configuration > configurations ;
95
-
96
- private DependencySupplier (List <Configuration > configurations ) {
73
+ public void setConfigurations (List <Configuration > configurations ) {
97
74
this .configurations = configurations ;
98
75
}
99
76
100
- @ Override
101
- public Map <String , List <Artifact >> get () {
102
- return getDependencies (this .configurations );
77
+ @ TaskAction
78
+ public void verify () {
79
+ Map <String , List <Artifact >> artifacts = getDependencies (this .configurations );
80
+ List <Artifact > oauth2OidcSdk = artifacts .get ("oauth2-oidc-sdk" );
81
+ List <Artifact > nimbusJoseJwt = artifacts .get ("nimbus-jose-jwt" );
82
+ if (oauth2OidcSdk .size () > 1 ) {
83
+ throw new IllegalStateException ("Found multiple versions of oauth2-oidc-sdk: " + oauth2OidcSdk );
84
+ }
85
+ Artifact oauth2OidcSdkArtifact = oauth2OidcSdk .get (0 );
86
+ String nimbusJoseJwtVersion = TransitiveDependencyLookupUtils .lookupJwtVersion (oauth2OidcSdkArtifact .version ());
87
+ List <Artifact > differentVersions = nimbusJoseJwt .stream ()
88
+ .filter ((artifact ) -> !artifact .version ().equals (nimbusJoseJwtVersion ))
89
+ .filter ((artifact -> !artifact .configurationName ().contains ("spring-security-cas" ))) // CAS uses a different version
90
+ .toList ();
91
+ if (!differentVersions .isEmpty ()) {
92
+ String message = "Found transitive nimbus-jose-jwt version [" + nimbusJoseJwtVersion + "] in oauth2-oidc-sdk " + oauth2OidcSdkArtifact
93
+ + ", but the project contains a different version of nimbus-jose-jwt " + differentVersions
94
+ + ". Please align the versions of nimbus-jose-jwt." ;
95
+ throw new IllegalStateException (message );
96
+ }
103
97
}
104
98
105
99
private Map <String , List <Artifact >> getDependencies (List <Configuration > configurations ) {
@@ -113,6 +107,10 @@ private Map<String, List<Artifact>> getDependencies(List<Configuration> configur
113
107
.distinct ()
114
108
.collect (Collectors .groupingBy (Artifact ::name ));
115
109
}
110
+
111
+ }
112
+
113
+ private record Artifact (String name , String version , String configurationName ) {
116
114
}
117
115
118
116
}
0 commit comments