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