1 package org.apache.maven.shared.dependency.graph.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.eclipse.aether.RepositoryException;
23 import org.eclipse.aether.util.graph.transformer.ConflictResolver.ConflictContext;
24 import org.eclipse.aether.util.graph.transformer.ConflictResolver.ScopeSelector;
25 import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
26
27 import java.util.Arrays;
28 import java.util.Comparator;
29 import java.util.List;
30
31
32
33
34
35 public class VerboseJavaScopeSelector extends ScopeSelector
36 {
37 public static final String REDUCED_SCOPE = "REDUCED_SCOPE";
38
39 private final ScopeSelector scopeSelector = new JavaScopeSelector();
40
41 @Override
42 public void selectScope( ConflictContext context )
43 throws RepositoryException
44 {
45 scopeSelector.selectScope( context );
46
47 context.getItems().stream()
48 .flatMap( i -> i.getScopes().stream() )
49 .distinct()
50 .max( new ScopeComparator() )
51 .filter( s -> s != context.getScope() )
52 .ifPresent( s -> context.getWinner().getNode().setData( REDUCED_SCOPE, s ) );
53 }
54
55 static class ScopeComparator implements Comparator<String>
56 {
57 List<String> orderedScopes = Arrays.asList( "compile", "runtime", "provided", "test" );
58
59 @Override
60 public int compare( String lhs, String rhs )
61 {
62 return orderedScopes.indexOf( rhs ) - orderedScopes.indexOf( lhs );
63 }
64 }
65 }