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.Arrays;
22 import java.util.Locale;
23 import java.util.function.Supplier;
24
25 import org.apache.maven.utils.Os;
26 import org.eclipse.aether.RepositorySystem;
27 import org.eclipse.aether.RepositorySystemSession.CloseableSession;
28 import org.eclipse.aether.RepositorySystemSession.SessionBuilder;
29 import org.eclipse.aether.artifact.DefaultArtifactType;
30 import org.eclipse.aether.collection.DependencyGraphTransformer;
31 import org.eclipse.aether.collection.DependencyManager;
32 import org.eclipse.aether.collection.DependencySelector;
33 import org.eclipse.aether.collection.DependencyTraverser;
34 import org.eclipse.aether.impl.scope.InternalScopeManager;
35 import org.eclipse.aether.impl.scope.ScopeManagerConfiguration;
36 import org.eclipse.aether.internal.impl.scope.ManagedDependencyContextRefiner;
37 import org.eclipse.aether.internal.impl.scope.ManagedScopeDeriver;
38 import org.eclipse.aether.internal.impl.scope.ManagedScopeSelector;
39 import org.eclipse.aether.internal.impl.scope.OptionalDependencySelector;
40 import org.eclipse.aether.internal.impl.scope.ScopeDependencySelector;
41 import org.eclipse.aether.internal.impl.scope.ScopeManagerImpl;
42 import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
43 import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
44 import org.eclipse.aether.util.artifact.JavaScopes;
45 import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
46 import org.eclipse.aether.util.graph.manager.TransitiveDependencyManager;
47 import org.eclipse.aether.util.graph.selector.AndDependencySelector;
48 import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
49 import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
50 import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
51 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
52 import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner;
53 import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
54 import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
55 import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
56 import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser;
57 import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
58
59 import static java.util.Objects.requireNonNull;
60
61
62
63
64
65
66
67
68
69
70
71
72 public class SessionBuilderSupplier implements Supplier<SessionBuilder> {
73 protected final RepositorySystem repositorySystem;
74 protected final InternalScopeManager scopeManager;
75
76
77
78
79 public SessionBuilderSupplier(RepositorySystem repositorySystem) {
80 this(repositorySystem, null);
81 }
82
83
84
85
86 public SessionBuilderSupplier(
87 RepositorySystem repositorySystem, ScopeManagerConfiguration scopeManagerConfiguration) {
88 this.repositorySystem = requireNonNull(repositorySystem);
89 this.scopeManager =
90 scopeManagerConfiguration == null ? null : new ScopeManagerImpl(scopeManagerConfiguration);
91 }
92
93 public void configureSessionBuilder(SessionBuilder session) {
94 session.setSystemProperties(System.getProperties());
95 boolean caseSensitive = !Os.IS_WINDOWS;
96 System.getenv().forEach((key, value) -> {
97 key = "env." + (caseSensitive ? key : key.toUpperCase(Locale.ENGLISH));
98 session.setSystemProperty(key, value);
99 });
100 if (getScopeManager() != null) {
101 session.setScopeManager(getScopeManager());
102 }
103 session.setDependencyTraverser(getDependencyTraverser());
104 session.setDependencyManager(getDependencyManager());
105 session.setDependencySelector(getDependencySelector());
106 session.setDependencyGraphTransformer(getDependencyGraphTransformer());
107 session.setArtifactTypeRegistry(getArtifactTypeRegistry());
108 session.setArtifactDescriptorPolicy(getArtifactDescriptorPolicy());
109 }
110
111 public InternalScopeManager getScopeManager() {
112 return this.scopeManager;
113 }
114
115 public DependencyTraverser getDependencyTraverser() {
116 return new FatArtifactTraverser();
117 }
118
119 public DependencyManager getDependencyManager() {
120 return this.getDependencyManager(false);
121 }
122
123 public DependencyManager getDependencyManager(boolean transitive) {
124 if (getScopeManager() == null) {
125 return transitive ? new TransitiveDependencyManager() : new ClassicDependencyManager();
126 } else {
127 return transitive
128 ? new TransitiveDependencyManager(getScopeManager())
129 : new ClassicDependencyManager(getScopeManager());
130 }
131 }
132
133 public DependencySelector getDependencySelector() {
134 if (getScopeManager() == null) {
135 return new AndDependencySelector(
136 ScopeDependencySelector.legacy(null, Arrays.asList(JavaScopes.TEST, JavaScopes.PROVIDED)),
137 OptionalDependencySelector.fromDirect(),
138 new ExclusionDependencySelector());
139 } else {
140 return new AndDependencySelector(
141 ScopeDependencySelector.legacy(
142 null,
143 Arrays.asList(
144 Maven3ScopeManagerConfiguration.DS_TEST,
145 Maven3ScopeManagerConfiguration.DS_PROVIDED)),
146 OptionalDependencySelector.fromDirect(),
147 new ExclusionDependencySelector());
148 }
149 }
150
151 public DependencyGraphTransformer getDependencyGraphTransformer() {
152 if (getScopeManager() == null) {
153 return new ChainedDependencyGraphTransformer(
154 new ConflictResolver(
155 new ConfigurableVersionSelector(),
156 new JavaScopeSelector(),
157 new SimpleOptionalitySelector(),
158 new JavaScopeDeriver()),
159 new JavaDependencyContextRefiner());
160 } else {
161 return new ChainedDependencyGraphTransformer(
162 new ConflictResolver(
163 new ConfigurableVersionSelector(),
164 new ManagedScopeSelector(getScopeManager()),
165 new SimpleOptionalitySelector(),
166 new ManagedScopeDeriver(getScopeManager())),
167 new ManagedDependencyContextRefiner(getScopeManager()));
168 }
169 }
170
171 public DefaultArtifactTypeRegistry getArtifactTypeRegistry() {
172 DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
173 stereotypes.add(new DefaultArtifactType("pom"));
174 stereotypes.add(new DefaultArtifactType("maven-plugin", "jar", "", "java"));
175 stereotypes.add(new DefaultArtifactType("jar", "jar", "", "java"));
176 stereotypes.add(new DefaultArtifactType("ejb", "jar", "", "java"));
177 stereotypes.add(new DefaultArtifactType("ejb-client", "jar", "client", "java"));
178 stereotypes.add(new DefaultArtifactType("test-jar", "jar", "tests", "java"));
179 stereotypes.add(new DefaultArtifactType("javadoc", "jar", "javadoc", "java"));
180 stereotypes.add(new DefaultArtifactType("java-source", "jar", "sources", "java", false, false));
181 stereotypes.add(new DefaultArtifactType("fatjar", "jar", "", "java", true, true));
182 stereotypes.add(new DefaultArtifactType("war", "war", "", "java", false, true));
183 stereotypes.add(new DefaultArtifactType("ear", "ear", "", "java", false, true));
184 stereotypes.add(new DefaultArtifactType("rar", "rar", "", "java", false, true));
185 stereotypes.add(new DefaultArtifactType("par", "par", "", "java", false, true));
186 return stereotypes;
187 }
188
189 public ArtifactDescriptorPolicy getArtifactDescriptorPolicy() {
190 return new SimpleArtifactDescriptorPolicy(true, true);
191 }
192
193
194
195
196
197
198
199
200
201
202
203 @Override
204 public SessionBuilder get() {
205 SessionBuilder builder = repositorySystem.createSessionBuilder();
206 configureSessionBuilder(builder);
207 return builder;
208 }
209 }