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.ArtifactTypeRegistry;
30 import org.eclipse.aether.artifact.DefaultArtifactType;
31 import org.eclipse.aether.collection.DependencyGraphTransformer;
32 import org.eclipse.aether.collection.DependencyManager;
33 import org.eclipse.aether.collection.DependencySelector;
34 import org.eclipse.aether.collection.DependencyTraverser;
35 import org.eclipse.aether.impl.scope.InternalScopeManager;
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.graph.manager.ClassicDependencyManager;
45 import org.eclipse.aether.util.graph.selector.AndDependencySelector;
46 import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
47 import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
48 import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
49 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
50 import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
51 import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser;
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
67 public class SessionBuilderSupplier implements Supplier<SessionBuilder> {
68 protected final RepositorySystem repositorySystem;
69 protected final InternalScopeManager scopeManager;
70
71 public SessionBuilderSupplier(RepositorySystem repositorySystem) {
72 this.repositorySystem = requireNonNull(repositorySystem);
73 this.scopeManager = new ScopeManagerImpl(Maven3ScopeManagerConfiguration.INSTANCE);
74 }
75
76 protected void configureSessionBuilder(SessionBuilder session) {
77 session.setSystemProperties(System.getProperties());
78 boolean caseSensitive = !Os.IS_WINDOWS;
79 System.getenv().forEach((key, value) -> {
80 key = "env." + (caseSensitive ? key : key.toUpperCase(Locale.ENGLISH));
81 session.setSystemProperty(key, value);
82 });
83 session.setScopeManager(scopeManager);
84 session.setDependencyTraverser(getDependencyTraverser());
85 session.setDependencyManager(getDependencyManager());
86 session.setDependencySelector(getDependencySelector());
87 session.setDependencyGraphTransformer(getDependencyGraphTransformer());
88 session.setArtifactTypeRegistry(getArtifactTypeRegistry());
89 session.setArtifactDescriptorPolicy(getArtifactDescriptorPolicy());
90 }
91
92 protected InternalScopeManager getScopeManager() {
93 return this.scopeManager;
94 }
95
96 protected DependencyTraverser getDependencyTraverser() {
97 return new FatArtifactTraverser();
98 }
99
100 protected DependencyManager getDependencyManager() {
101 return new ClassicDependencyManager(getScopeManager());
102 }
103
104 protected DependencySelector getDependencySelector() {
105 return new AndDependencySelector(
106 ScopeDependencySelector.legacy(
107 null,
108 Arrays.asList(
109 Maven3ScopeManagerConfiguration.DS_TEST, Maven3ScopeManagerConfiguration.DS_PROVIDED)),
110 OptionalDependencySelector.fromDirect(),
111 new ExclusionDependencySelector());
112 }
113
114 protected DependencyGraphTransformer getDependencyGraphTransformer() {
115 return new ChainedDependencyGraphTransformer(
116 new ConflictResolver(
117 new ConfigurableVersionSelector(),
118 new ManagedScopeSelector(getScopeManager()),
119 new SimpleOptionalitySelector(),
120 new ManagedScopeDeriver(getScopeManager())),
121 new ManagedDependencyContextRefiner(getScopeManager()));
122 }
123
124 protected ArtifactTypeRegistry getArtifactTypeRegistry() {
125 DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
126 stereotypes.add(new DefaultArtifactType("pom"));
127 stereotypes.add(new DefaultArtifactType("maven-plugin", "jar", "", "java"));
128 stereotypes.add(new DefaultArtifactType("jar", "jar", "", "java"));
129 stereotypes.add(new DefaultArtifactType("ejb", "jar", "", "java"));
130 stereotypes.add(new DefaultArtifactType("ejb-client", "jar", "client", "java"));
131 stereotypes.add(new DefaultArtifactType("test-jar", "jar", "tests", "java"));
132 stereotypes.add(new DefaultArtifactType("javadoc", "jar", "javadoc", "java"));
133 stereotypes.add(new DefaultArtifactType("java-source", "jar", "sources", "java", false, false));
134 stereotypes.add(new DefaultArtifactType("war", "war", "", "java", false, true));
135 stereotypes.add(new DefaultArtifactType("ear", "ear", "", "java", false, true));
136 stereotypes.add(new DefaultArtifactType("rar", "rar", "", "java", false, true));
137 stereotypes.add(new DefaultArtifactType("par", "par", "", "java", false, true));
138 return stereotypes;
139 }
140
141 protected ArtifactDescriptorPolicy getArtifactDescriptorPolicy() {
142 return new SimpleArtifactDescriptorPolicy(true, true);
143 }
144
145
146
147
148
149
150
151
152
153
154
155 @Override
156 public SessionBuilder get() {
157 SessionBuilder builder = repositorySystem.createSessionBuilder();
158 configureSessionBuilder(builder);
159 return builder;
160 }
161 }