99
1010package org .elasticsearch .gradle .internal .util ;
1111
12+ import com .github .jengelman .gradle .plugins .shadow .ShadowBasePlugin ;
13+
1214import org .gradle .api .artifacts .ArtifactView ;
1315import org .gradle .api .artifacts .Configuration ;
1416import org .gradle .api .artifacts .ResolvableDependencies ;
1517import org .gradle .api .artifacts .component .ComponentIdentifier ;
18+ import org .gradle .api .artifacts .component .ProjectComponentIdentifier ;
1619import org .gradle .api .artifacts .result .ResolvedComponentResult ;
1720import org .gradle .api .artifacts .result .ResolvedDependencyResult ;
1821import org .gradle .api .file .FileCollection ;
22+ import org .gradle .api .provider .Provider ;
1923import org .gradle .api .specs .AndSpec ;
2024import org .gradle .api .specs .Spec ;
2125
@@ -38,7 +42,7 @@ public static ArtifactView createNonTransitiveArtifactsView(Configuration config
3842 public static ArtifactView createNonTransitiveArtifactsView (Configuration configuration , Spec <ComponentIdentifier > componentFilter ) {
3943 ResolvableDependencies incoming = configuration .getIncoming ();
4044 return incoming .artifactView (viewConfiguration -> {
41- Set <ComponentIdentifier > firstLevelDependencyComponents = incoming .getResolutionResult ()
45+ Provider < Set <ComponentIdentifier > > firstLevelDependencyComponents = incoming .getResolutionResult ()
4246 .getRootComponent ()
4347 .map (
4448 rootComponent -> rootComponent .getDependencies ()
@@ -48,11 +52,36 @@ public static ArtifactView createNonTransitiveArtifactsView(Configuration config
4852 .filter (dependency -> dependency .getSelected () instanceof ResolvedComponentResult )
4953 .map (dependency -> dependency .getSelected ().getId ())
5054 .collect (Collectors .toSet ())
51- )
52- .get ();
55+ );
5356 viewConfiguration .componentFilter (
54- new AndSpec <>(identifier -> firstLevelDependencyComponents .contains (identifier ), componentFilter )
57+ new AndSpec <>(identifier -> firstLevelDependencyComponents .get (). contains (identifier ), componentFilter )
5558 );
5659 });
5760 }
61+
62+ /**
63+ * This method gives us an artifact view of a configuration that filters out all
64+ * project dependencies that are not shadowed jars.
65+ * Basically a thirdparty only view of the dependency tree.
66+ */
67+ public static FileCollection thirdPartyDependenciesView (Configuration configuration ) {
68+ ResolvableDependencies incoming = configuration .getIncoming ();
69+ return incoming .artifactView (v -> {
70+ // resolve componentIdentifier for all shadowed project dependencies
71+ Provider <Set <ComponentIdentifier >> shadowedDependencies = incoming .getResolutionResult ()
72+ .getRootComponent ()
73+ .map (
74+ root -> root .getDependencies ()
75+ .stream ()
76+ .filter (dep -> dep instanceof ResolvedDependencyResult )
77+ .map (dep -> (ResolvedDependencyResult ) dep )
78+ .filter (dep -> dep .getResolvedVariant ().getDisplayName () == ShadowBasePlugin .SHADOW )
79+ .filter (dep -> dep .getSelected () instanceof ResolvedComponentResult )
80+ .map (dep -> dep .getSelected ().getId ())
81+ .collect (Collectors .toSet ())
82+ );
83+ // filter out project dependencies if they are not a shadowed dependency
84+ v .componentFilter (i -> (i instanceof ProjectComponentIdentifier == false || shadowedDependencies .get ().contains (i )));
85+ }).getFiles ();
86+ }
5887}
0 commit comments