1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.internal.impl.resolver;
20
21 import java.util.Arrays;
22 import java.util.function.Supplier;
23
24 import org.apache.maven.api.DependencyScope;
25 import org.apache.maven.internal.impl.resolver.artifact.FatArtifactTraverser;
26 import org.apache.maven.internal.impl.resolver.scopes.Maven4ScopeManagerConfiguration;
27 import org.apache.maven.internal.impl.resolver.type.DefaultTypeProvider;
28 import org.eclipse.aether.RepositorySystem;
29 import org.eclipse.aether.RepositorySystemSession.CloseableSession;
30 import org.eclipse.aether.RepositorySystemSession.SessionBuilder;
31 import org.eclipse.aether.artifact.ArtifactTypeRegistry;
32 import org.eclipse.aether.collection.DependencyGraphTransformer;
33 import org.eclipse.aether.collection.DependencyManager;
34 import org.eclipse.aether.collection.DependencySelector;
35 import org.eclipse.aether.collection.DependencyTraverser;
36 import org.eclipse.aether.impl.scope.InternalScopeManager;
37 import org.eclipse.aether.internal.impl.scope.ManagedDependencyContextRefiner;
38 import org.eclipse.aether.internal.impl.scope.ManagedScopeDeriver;
39 import org.eclipse.aether.internal.impl.scope.ManagedScopeSelector;
40 import org.eclipse.aether.internal.impl.scope.OptionalDependencySelector;
41 import org.eclipse.aether.internal.impl.scope.ScopeDependencySelector;
42 import org.eclipse.aether.internal.impl.scope.ScopeManagerImpl;
43 import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
44 import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
45 import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
46 import org.eclipse.aether.util.graph.selector.AndDependencySelector;
47 import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
48 import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
49 import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
50 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
51 import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
52 import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
53
54 import static java.util.Objects.requireNonNull;
55
56
57
58
59
60
61
62
63
64
65 public class MavenSessionBuilderSupplier implements Supplier<SessionBuilder> {
66 protected final RepositorySystem repositorySystem;
67 protected final InternalScopeManager scopeManager;
68
69 public MavenSessionBuilderSupplier(RepositorySystem repositorySystem) {
70 this.repositorySystem = requireNonNull(repositorySystem);
71 this.scopeManager = new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE);
72 }
73
74 protected DependencyTraverser getDependencyTraverser() {
75 return new FatArtifactTraverser();
76 }
77
78 protected InternalScopeManager getScopeManager() {
79 return scopeManager;
80 }
81
82 protected DependencyManager getDependencyManager() {
83 return getDependencyManager(true);
84 }
85
86 public DependencyManager getDependencyManager(boolean transitive) {
87 return new ClassicDependencyManager(transitive, getScopeManager());
88 }
89
90 protected DependencySelector getDependencySelector() {
91 return new AndDependencySelector(
92 ScopeDependencySelector.legacy(
93 null, Arrays.asList(DependencyScope.TEST.id(), DependencyScope.PROVIDED.id())),
94 OptionalDependencySelector.fromDirect(),
95 new ExclusionDependencySelector());
96 }
97
98 protected DependencyGraphTransformer getDependencyGraphTransformer() {
99 return new ChainedDependencyGraphTransformer(
100 new ConflictResolver(
101 new ConfigurableVersionSelector(), new ManagedScopeSelector(getScopeManager()),
102 new SimpleOptionalitySelector(), new ManagedScopeDeriver(getScopeManager())),
103 new ManagedDependencyContextRefiner(getScopeManager()));
104 }
105
106
107
108
109
110
111
112
113
114
115 protected ArtifactTypeRegistry getArtifactTypeRegistry() {
116 DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
117 new DefaultTypeProvider().types().forEach(stereotypes::add);
118 return stereotypes;
119 }
120
121 protected ArtifactDescriptorPolicy getArtifactDescriptorPolicy() {
122 return new SimpleArtifactDescriptorPolicy(true, true);
123 }
124
125 protected void configureSessionBuilder(SessionBuilder session) {
126 session.setDependencyTraverser(getDependencyTraverser());
127 session.setDependencyManager(getDependencyManager());
128 session.setDependencySelector(getDependencySelector());
129 session.setDependencyGraphTransformer(getDependencyGraphTransformer());
130 session.setArtifactTypeRegistry(getArtifactTypeRegistry());
131 session.setArtifactDescriptorPolicy(getArtifactDescriptorPolicy());
132 session.setScopeManager(getScopeManager());
133 }
134
135
136
137
138
139
140
141
142
143
144
145 @Override
146 public SessionBuilder get() {
147 requireNonNull(repositorySystem, "repositorySystem");
148 SessionBuilder builder = repositorySystem.createSessionBuilder();
149 configureSessionBuilder(builder);
150 return builder;
151 }
152 }