1 package org.apache.maven.shared.dependency.graph.internal.maven30;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Collection;
23 import java.util.HashSet;
24 import java.util.Set;
25
26 import org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver.ConflictContext;
27 import org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver.ConflictItem;
28 import org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver.ScopeSelector;
29 import org.sonatype.aether.RepositoryException;
30 import org.sonatype.aether.util.artifact.JavaScopes;
31
32
33
34
35
36
37
38 public final class JavaScopeSelector
39 extends ScopeSelector
40 {
41
42 @Override
43 public void selectScope( ConflictContext context )
44 throws RepositoryException
45 {
46 String scope = context.getWinner().getDependency().getScope();
47 if ( !JavaScopes.SYSTEM.equals( scope ) )
48 {
49 scope = chooseEffectiveScope( context.getItems() );
50 }
51 context.setScope( scope );
52 }
53
54 private String chooseEffectiveScope( Collection<ConflictItem> items )
55 {
56 Set<String> scopes = new HashSet<>();
57 for ( ConflictItem item : items )
58 {
59 if ( item.getDepth() <= 1 )
60 {
61 return item.getDependency().getScope();
62 }
63 scopes.addAll( item.getScopes() );
64 }
65 return chooseEffectiveScope( scopes );
66 }
67
68 private String chooseEffectiveScope( Set<String> scopes )
69 {
70 if ( scopes.size() > 1 )
71 {
72 scopes.remove( JavaScopes.SYSTEM );
73 }
74
75 String effectiveScope = "";
76
77 if ( scopes.size() == 1 )
78 {
79 effectiveScope = scopes.iterator().next();
80 }
81 else if ( scopes.contains( JavaScopes.COMPILE ) )
82 {
83 effectiveScope = JavaScopes.COMPILE;
84 }
85 else if ( scopes.contains( JavaScopes.RUNTIME ) )
86 {
87 effectiveScope = JavaScopes.RUNTIME;
88 }
89 else if ( scopes.contains( JavaScopes.PROVIDED ) )
90 {
91 effectiveScope = JavaScopes.PROVIDED;
92 }
93 else if ( scopes.contains( JavaScopes.TEST ) )
94 {
95 effectiveScope = JavaScopes.TEST;
96 }
97
98 return effectiveScope;
99 }
100
101
102 }