1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.supplier;
20
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.stream.Collectors;
26
27 import org.eclipse.aether.artifact.ArtifactProperties;
28 import org.eclipse.aether.impl.scope.BuildScopeMatrixSource;
29 import org.eclipse.aether.impl.scope.BuildScopeSource;
30 import org.eclipse.aether.impl.scope.CommonBuilds;
31 import org.eclipse.aether.impl.scope.InternalScopeManager;
32 import org.eclipse.aether.impl.scope.ScopeManagerConfiguration;
33 import org.eclipse.aether.internal.impl.scope.ScopeManagerDump;
34 import org.eclipse.aether.scope.DependencyScope;
35 import org.eclipse.aether.scope.ResolutionScope;
36
37 import static org.eclipse.aether.impl.scope.BuildScopeQuery.all;
38 import static org.eclipse.aether.impl.scope.BuildScopeQuery.byBuildPath;
39 import static org.eclipse.aether.impl.scope.BuildScopeQuery.byProjectPath;
40 import static org.eclipse.aether.impl.scope.BuildScopeQuery.select;
41 import static org.eclipse.aether.impl.scope.BuildScopeQuery.singleton;
42 import static org.eclipse.aether.impl.scope.BuildScopeQuery.union;
43
44
45
46
47
48
49 public final class Maven3ScopeManagerConfiguration implements ScopeManagerConfiguration {
50 public static final Maven3ScopeManagerConfiguration INSTANCE = new Maven3ScopeManagerConfiguration();
51 public static final String DS_COMPILE = "compile";
52 public static final String DS_RUNTIME = "runtime";
53 public static final String DS_PROVIDED = "provided";
54 public static final String DS_SYSTEM = "system";
55 public static final String DS_TEST = "test";
56 public static final String RS_NONE = "none";
57 public static final String RS_MAIN_COMPILE = "main-compile";
58 public static final String RS_MAIN_COMPILE_PLUS_RUNTIME = "main-compilePlusRuntime";
59 public static final String RS_MAIN_RUNTIME = "main-runtime";
60 public static final String RS_MAIN_RUNTIME_PLUS_SYSTEM = "main-runtimePlusSystem";
61 public static final String RS_TEST_COMPILE = "test-compile";
62 public static final String RS_TEST_RUNTIME = "test-runtime";
63
64 private Maven3ScopeManagerConfiguration() {}
65
66 @Override
67 public String getId() {
68 return "Maven3";
69 }
70
71 @Override
72 public boolean isStrictDependencyScopes() {
73 return false;
74 }
75
76 @Override
77 public boolean isStrictResolutionScopes() {
78 return false;
79 }
80
81 @Override
82 public BuildScopeSource getBuildScopeSource() {
83 return new BuildScopeMatrixSource(
84 Collections.singletonList(CommonBuilds.PROJECT_PATH_MAIN),
85 Arrays.asList(CommonBuilds.BUILD_PATH_COMPILE, CommonBuilds.BUILD_PATH_RUNTIME),
86 CommonBuilds.MAVEN_TEST_BUILD_SCOPE);
87 }
88
89 @Override
90 public Collection<DependencyScope> buildDependencyScopes(InternalScopeManager internalScopeManager) {
91 ArrayList<DependencyScope> result = new ArrayList<>();
92 result.add(internalScopeManager.createDependencyScope(DS_COMPILE, true, all()));
93 result.add(internalScopeManager.createDependencyScope(
94 DS_RUNTIME, true, byBuildPath(CommonBuilds.BUILD_PATH_RUNTIME)));
95 result.add(internalScopeManager.createDependencyScope(
96 DS_PROVIDED,
97 false,
98 union(
99 byBuildPath(CommonBuilds.BUILD_PATH_COMPILE),
100 select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_RUNTIME))));
101 result.add(internalScopeManager.createDependencyScope(
102 DS_TEST, false, byProjectPath(CommonBuilds.PROJECT_PATH_TEST)));
103 result.add(internalScopeManager.createSystemDependencyScope(
104 DS_SYSTEM, false, all(), ArtifactProperties.LOCAL_PATH));
105 return result;
106 }
107
108 @Override
109 public Collection<ResolutionScope> buildResolutionScopes(InternalScopeManager internalScopeManager) {
110 Collection<DependencyScope> allDependencyScopes = internalScopeManager.getDependencyScopeUniverse();
111 Collection<DependencyScope> nonTransitiveDependencyScopes =
112 allDependencyScopes.stream().filter(s -> !s.isTransitive()).collect(Collectors.toSet());
113 DependencyScope system =
114 internalScopeManager.getDependencyScope(DS_SYSTEM).orElse(null);
115
116 ArrayList<ResolutionScope> result = new ArrayList<>();
117 result.add(internalScopeManager.createResolutionScope(
118 RS_NONE,
119 InternalScopeManager.Mode.REMOVE,
120 Collections.emptySet(),
121 Collections.emptySet(),
122 allDependencyScopes));
123 result.add(internalScopeManager.createResolutionScope(
124 RS_MAIN_COMPILE,
125 InternalScopeManager.Mode.ELIMINATE,
126 singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_COMPILE),
127 Collections.singletonList(system),
128 nonTransitiveDependencyScopes));
129 result.add(internalScopeManager.createResolutionScope(
130 RS_MAIN_COMPILE_PLUS_RUNTIME,
131 InternalScopeManager.Mode.ELIMINATE,
132 byProjectPath(CommonBuilds.PROJECT_PATH_MAIN),
133 Collections.singletonList(system),
134 nonTransitiveDependencyScopes));
135 result.add(internalScopeManager.createResolutionScope(
136 RS_MAIN_RUNTIME,
137 InternalScopeManager.Mode.ELIMINATE,
138 singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_RUNTIME),
139 Collections.emptySet(),
140 nonTransitiveDependencyScopes));
141 result.add(internalScopeManager.createResolutionScope(
142 RS_MAIN_RUNTIME_PLUS_SYSTEM,
143 InternalScopeManager.Mode.ELIMINATE,
144 singleton(CommonBuilds.PROJECT_PATH_MAIN, CommonBuilds.BUILD_PATH_RUNTIME),
145 Collections.singletonList(system),
146 nonTransitiveDependencyScopes));
147 result.add(internalScopeManager.createResolutionScope(
148 RS_TEST_COMPILE,
149 InternalScopeManager.Mode.ELIMINATE,
150 select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_COMPILE),
151 Collections.singletonList(system),
152 nonTransitiveDependencyScopes));
153 result.add(internalScopeManager.createResolutionScope(
154 RS_TEST_RUNTIME,
155 InternalScopeManager.Mode.ELIMINATE,
156 select(CommonBuilds.PROJECT_PATH_TEST, CommonBuilds.BUILD_PATH_RUNTIME),
157 Collections.singletonList(system),
158 nonTransitiveDependencyScopes));
159 return result;
160 }
161
162
163
164 public static void main(String... args) {
165 ScopeManagerDump.dump(Maven3ScopeManagerConfiguration.INSTANCE);
166 }
167 }