Skip to content

Commit 240cc04

Browse files
committed
[MNG-8578]add exclusion scope to repo, allow exclude dependencies from build(including parent, dependencies, etc)
1 parent 8cd3024 commit 240cc04

File tree

4 files changed

+106
-13
lines changed

4 files changed

+106
-13
lines changed

maven-resolver-api/src/main/java/org/eclipse/aether/collection/CollectRequest.java

+43
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.eclipse.aether.RequestTrace;
2727
import org.eclipse.aether.artifact.Artifact;
2828
import org.eclipse.aether.graph.Dependency;
29+
import org.eclipse.aether.graph.Exclusion;
2930
import org.eclipse.aether.repository.RemoteRepository;
3031
import org.eclipse.aether.scope.ResolutionScope;
3132

@@ -55,6 +56,8 @@ public final class CollectRequest {
5556

5657
private RequestTrace trace;
5758

59+
private List<Exclusion> exclusions = Collections.emptyList();
60+
5861
/**
5962
* Creates an uninitialized request.
6063
*/
@@ -331,6 +334,46 @@ public CollectRequest setTrace(RequestTrace trace) {
331334
return this;
332335
}
333336

337+
/**
338+
* Gets the direct exclusions.
339+
*
340+
* @return The direct exclusions, never {@code null}.
341+
*/
342+
public List<Exclusion> getExclusions() {
343+
return exclusions;
344+
}
345+
346+
/**
347+
* Sets the direct exclusions.
348+
*
349+
* @param exclusions The direct exclusions, may be {@code null}.
350+
* @return This request for chaining, never {@code null}.
351+
*/
352+
public CollectRequest setExclusions(List<Exclusion> exclusions) {
353+
if (exclusions == null) {
354+
this.exclusions = Collections.emptyList();
355+
} else {
356+
this.exclusions = exclusions;
357+
}
358+
return this;
359+
}
360+
361+
/**
362+
* Adds the specified exclusion.
363+
*
364+
* @param exclusion The exclusion to add, may be {@code null}.
365+
* @return This request for chaining, never {@code null}.
366+
*/
367+
public CollectRequest addExclusion(Exclusion exclusion) {
368+
if (exclusion != null) {
369+
if (this.exclusions.isEmpty()) {
370+
this.exclusions = new ArrayList<>();
371+
}
372+
this.exclusions.add(exclusion);
373+
}
374+
return this;
375+
}
376+
334377
@Override
335378
public String toString() {
336379
return getRoot() + " -> " + getDependencies() + " < " + getRepositories();

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java

+4
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.eclipse.aether.graph.DefaultDependencyNode;
4141
import org.eclipse.aether.graph.Dependency;
4242
import org.eclipse.aether.graph.DependencyNode;
43+
import org.eclipse.aether.graph.Exclusion;
4344
import org.eclipse.aether.impl.ArtifactDescriptorReader;
4445
import org.eclipse.aether.impl.DependencyCollector;
4546
import org.eclipse.aether.impl.RemoteRepositoryManager;
@@ -140,6 +141,7 @@ public final CollectResult collectDependencies(RepositorySystemSession session,
140141
List<RemoteRepository> repositories = request.getRepositories();
141142
List<Dependency> dependencies = request.getDependencies();
142143
List<Dependency> managedDependencies = request.getManagedDependencies();
144+
List<Exclusion> exclusions = request.getExclusions();
143145

144146
Map<String, Object> stats = new LinkedHashMap<>();
145147
long time1 = System.nanoTime();
@@ -230,6 +232,7 @@ public final CollectResult collectDependencies(RepositorySystemSession session,
230232
repositories,
231233
dependencies,
232234
managedDependencies,
235+
exclusions,
233236
results);
234237

235238
errorPath = results.getErrorPath();
@@ -301,6 +304,7 @@ protected abstract void doCollectDependencies(
301304
List<RemoteRepository> repositories,
302305
List<Dependency> dependencies,
303306
List<Dependency> managedDependencies,
307+
List<Exclusion> exclusions,
304308
Results results)
305309
throws DependencyCollectionException;
306310

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java

+20-3
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.eclipse.aether.graph.DefaultDependencyNode;
5656
import org.eclipse.aether.graph.Dependency;
5757
import org.eclipse.aether.graph.DependencyNode;
58+
import org.eclipse.aether.graph.Exclusion;
5859
import org.eclipse.aether.impl.ArtifactDescriptorReader;
5960
import org.eclipse.aether.impl.RemoteRepositoryManager;
6061
import org.eclipse.aether.impl.VersionRangeResolver;
@@ -74,6 +75,7 @@
7475
import org.eclipse.aether.util.artifact.ArtifactIdUtils;
7576
import org.eclipse.aether.util.concurrency.ExecutorUtils;
7677
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
78+
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
7779
import org.eclipse.aether.version.Version;
7880

7981
import static org.eclipse.aether.internal.impl.collect.DefaultDependencyCycle.find;
@@ -147,6 +149,7 @@ protected void doCollectDependencies(
147149
List<RemoteRepository> repositories,
148150
List<Dependency> dependencies,
149151
List<Dependency> managedDependencies,
152+
List<Exclusion> exclusions,
150153
Results results)
151154
throws DependencyCollectionException {
152155
boolean useSkip = ConfigUtils.getBoolean(session, DEFAULT_SKIPPER, CONFIG_PROP_SKIPPER);
@@ -162,6 +165,8 @@ protected void doCollectDependencies(
162165
: DependencyResolutionSkipper.neverSkipper();
163166
ParallelDescriptorResolver parallelDescriptorResolver = new ParallelDescriptorResolver(nThreads)) {
164167
Args args = new Args(session, pool, context, versionContext, request, skipper, parallelDescriptorResolver);
168+
ExclusionDependencySelector exclusionDependencySelector =
169+
exclusions == null || exclusions.isEmpty() ? null : new ExclusionDependencySelector(exclusions);
165170

166171
DependencySelector rootDepSelector = session.getDependencySelector() != null
167172
? session.getDependencySelector().deriveChildSelector(context)
@@ -200,7 +205,12 @@ protected void doCollectDependencies(
200205

201206
while (!args.dependencyProcessingQueue.isEmpty()) {
202207
processDependency(
203-
args, results, args.dependencyProcessingQueue.remove(), Collections.emptyList(), false);
208+
args,
209+
results,
210+
args.dependencyProcessingQueue.remove(),
211+
Collections.emptyList(),
212+
false,
213+
exclusionDependencySelector);
204214
}
205215

206216
if (args.interruptedException.get() != null) {
@@ -216,14 +226,20 @@ private void processDependency(
216226
Results results,
217227
DependencyProcessingContext context,
218228
List<Artifact> relocations,
219-
boolean disableVersionManagement) {
229+
boolean disableVersionManagement,
230+
ExclusionDependencySelector exclusionDependencySelector) {
220231
if (Thread.interrupted()) {
221232
args.interruptedException.set(new InterruptedException());
222233
}
223234
if (args.interruptedException.get() != null) {
224235
return;
225236
}
226237
Dependency dependency = context.dependency;
238+
if (exclusionDependencySelector != null) {
239+
if (!exclusionDependencySelector.selectDependency(dependency)) {
240+
return;
241+
}
242+
}
227243
PremanagedDependency preManaged = context.premanagedDependency;
228244

229245
boolean noDescriptor = isLackingDescriptor(args.session, dependency.getArtifact());
@@ -291,7 +307,8 @@ private void processDependency(
291307
results,
292308
relocatedContext,
293309
descriptorResult.getRelocations(),
294-
disableVersionManagementSubsequently);
310+
disableVersionManagementSubsequently,
311+
exclusionDependencySelector);
295312
}
296313

297314
return;

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java

+39-10
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.eclipse.aether.graph.DefaultDependencyNode;
4040
import org.eclipse.aether.graph.Dependency;
4141
import org.eclipse.aether.graph.DependencyNode;
42+
import org.eclipse.aether.graph.Exclusion;
4243
import org.eclipse.aether.impl.ArtifactDescriptorReader;
4344
import org.eclipse.aether.impl.RemoteRepositoryManager;
4445
import org.eclipse.aether.impl.VersionRangeResolver;
@@ -57,6 +58,7 @@
5758
import org.eclipse.aether.spi.artifact.decorator.ArtifactDecoratorFactory;
5859
import org.eclipse.aether.util.ConfigUtils;
5960
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
61+
import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
6062
import org.eclipse.aether.version.Version;
6163

6264
/**
@@ -92,12 +94,16 @@ protected void doCollectDependencies(
9294
List<RemoteRepository> repositories,
9395
List<Dependency> dependencies,
9496
List<Dependency> managedDependencies,
97+
List<Exclusion> exclusions,
9598
Results results)
9699
throws DependencyCollectionException {
100+
// TODO
97101
NodeStack nodes = new NodeStack();
98102
nodes.push(node);
99103

100104
Args args = new Args(session, pool, nodes, context, versionContext, request);
105+
ExclusionDependencySelector exclusionDependencySelector =
106+
exclusions == null || exclusions.isEmpty() ? null : new ExclusionDependencySelector(exclusions);
101107

102108
process(
103109
args,
@@ -114,7 +120,8 @@ protected void doCollectDependencies(
114120
session.getDependencyTraverser() != null
115121
? session.getDependencyTraverser().deriveChildTraverser(context)
116122
: null,
117-
session.getVersionFilter() != null ? session.getVersionFilter().deriveChildFilter(context) : null);
123+
session.getVersionFilter() != null ? session.getVersionFilter().deriveChildFilter(context) : null,
124+
exclusionDependencySelector);
118125

119126
if (args.interruptedException.get() != null) {
120127
throw new DependencyCollectionException(
@@ -132,7 +139,8 @@ private void process(
132139
DependencySelector depSelector,
133140
DependencyManager depManager,
134141
DependencyTraverser depTraverser,
135-
VersionFilter verFilter) {
142+
VersionFilter verFilter,
143+
ExclusionDependencySelector exclusionDependencySelector) {
136144
if (Thread.interrupted()) {
137145
args.interruptedException.set(new InterruptedException());
138146
}
@@ -141,7 +149,16 @@ private void process(
141149
}
142150
for (Dependency dependency : dependencies) {
143151
processDependency(
144-
args, trace, results, repositories, depSelector, depManager, depTraverser, verFilter, dependency);
152+
args,
153+
trace,
154+
results,
155+
repositories,
156+
depSelector,
157+
depManager,
158+
depTraverser,
159+
verFilter,
160+
dependency,
161+
exclusionDependencySelector);
145162
}
146163
}
147164

@@ -155,7 +172,8 @@ private void processDependency(
155172
DependencyManager depManager,
156173
DependencyTraverser depTraverser,
157174
VersionFilter verFilter,
158-
Dependency dependency) {
175+
Dependency dependency,
176+
ExclusionDependencySelector exclusionDependencySelector) {
159177

160178
List<Artifact> relocations = Collections.emptyList();
161179
processDependency(
@@ -169,7 +187,8 @@ private void processDependency(
169187
verFilter,
170188
dependency,
171189
relocations,
172-
false);
190+
false,
191+
exclusionDependencySelector);
173192
}
174193

175194
@SuppressWarnings("checkstyle:parameternumber")
@@ -184,7 +203,13 @@ private void processDependency(
184203
VersionFilter verFilter,
185204
Dependency dependency,
186205
List<Artifact> relocations,
187-
boolean disableVersionManagement) {
206+
boolean disableVersionManagement,
207+
ExclusionDependencySelector exclusionDependencySelector) {
208+
if (exclusionDependencySelector != null) {
209+
if (!exclusionDependencySelector.selectDependency(dependency)) {
210+
return;
211+
}
212+
}
188213
if (depSelector != null && !depSelector.selectDependency(dependency)) {
189214
return;
190215
}
@@ -256,7 +281,8 @@ private void processDependency(
256281
verFilter,
257282
d,
258283
descriptorResult.getRelocations(),
259-
disableVersionManagementSubsequently);
284+
disableVersionManagementSubsequently,
285+
exclusionDependencySelector);
260286
return;
261287
} else {
262288
d = args.pool.intern(d.setArtifact(args.pool.intern(d.getArtifact())));
@@ -290,7 +316,8 @@ private void processDependency(
290316
verFilter,
291317
d,
292318
descriptorResult,
293-
child);
319+
child,
320+
exclusionDependencySelector);
294321
}
295322
}
296323
} else {
@@ -322,7 +349,8 @@ private void doRecurse(
322349
VersionFilter verFilter,
323350
Dependency d,
324351
ArtifactDescriptorResult descriptorResult,
325-
DefaultDependencyNode child) {
352+
DefaultDependencyNode child,
353+
ExclusionDependencySelector exclusionDependencySelector) {
326354
DefaultDependencyCollectionContext context = args.collectionContext.get();
327355
args.collectionContext.compareAndSet(context, context.set(d, descriptorResult.getManagedDependencies()));
328356
context = args.collectionContext.get();
@@ -355,7 +383,8 @@ private void doRecurse(
355383
childSelector,
356384
childManager,
357385
childTraverser,
358-
childFilter);
386+
childFilter,
387+
exclusionDependencySelector);
359388

360389
args.nodes.pop();
361390
} else {

0 commit comments

Comments
 (0)