1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package org.apache.maven.repository.internal;
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.repository.internal.artifact.FatArtifactTraverser;
26  import org.apache.maven.repository.internal.scopes.Maven4ScopeManagerConfiguration;
27  import org.apache.maven.repository.internal.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.ConflictResolver;
50  import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
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  
66  @Deprecated(since = "4.0.0")
67  public class MavenSessionBuilderSupplier implements Supplier<SessionBuilder> {
68      protected final RepositorySystem repositorySystem;
69      protected final InternalScopeManager scopeManager;
70  
71      public MavenSessionBuilderSupplier(RepositorySystem repositorySystem) {
72          this.repositorySystem = requireNonNull(repositorySystem);
73          this.scopeManager = new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE);
74      }
75  
76      
77  
78  
79      @Deprecated
80      MavenSessionBuilderSupplier() {
81          this.repositorySystem = null;
82          this.scopeManager = new ScopeManagerImpl(Maven4ScopeManagerConfiguration.INSTANCE);
83      }
84  
85      protected InternalScopeManager getScopeManager() {
86          return scopeManager;
87      }
88  
89      protected DependencyTraverser getDependencyTraverser() {
90          return new FatArtifactTraverser();
91      }
92  
93      protected DependencyManager getDependencyManager() {
94          return getDependencyManager(true); 
95      }
96  
97      public DependencyManager getDependencyManager(boolean transitive) {
98          return new ClassicDependencyManager(transitive, getScopeManager());
99      }
100 
101     protected DependencySelector getDependencySelector() {
102         return new AndDependencySelector(
103                 ScopeDependencySelector.legacy(
104                         null, Arrays.asList(DependencyScope.TEST.id(), DependencyScope.PROVIDED.id())),
105                 OptionalDependencySelector.fromDirect(),
106                 new ExclusionDependencySelector());
107     }
108 
109     protected DependencyGraphTransformer getDependencyGraphTransformer() {
110         return new ChainedDependencyGraphTransformer(
111                 new ConflictResolver(
112                         new NearestVersionSelector(), new ManagedScopeSelector(getScopeManager()),
113                         new SimpleOptionalitySelector(), new ManagedScopeDeriver(getScopeManager())),
114                 new ManagedDependencyContextRefiner(getScopeManager()));
115     }
116 
117     
118 
119 
120 
121 
122 
123 
124 
125 
126     protected ArtifactTypeRegistry getArtifactTypeRegistry() {
127         DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
128         new DefaultTypeProvider().types().forEach(stereotypes::add);
129         return stereotypes;
130     }
131 
132     protected ArtifactDescriptorPolicy getArtifactDescriptorPolicy() {
133         return new SimpleArtifactDescriptorPolicy(true, true);
134     }
135 
136     protected void configureSessionBuilder(SessionBuilder session) {
137         session.setDependencyTraverser(getDependencyTraverser());
138         session.setDependencyManager(getDependencyManager());
139         session.setDependencySelector(getDependencySelector());
140         session.setDependencyGraphTransformer(getDependencyGraphTransformer());
141         session.setArtifactTypeRegistry(getArtifactTypeRegistry());
142         session.setArtifactDescriptorPolicy(getArtifactDescriptorPolicy());
143         session.setScopeManager(getScopeManager());
144     }
145 
146     
147 
148 
149 
150 
151 
152 
153 
154 
155 
156     @Override
157     public SessionBuilder get() {
158         requireNonNull(repositorySystem, "repositorySystem");
159         SessionBuilder builder = repositorySystem.createSessionBuilder();
160         configureSessionBuilder(builder);
161         return builder;
162     }
163 }