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.internal.impl.scope.OptionalDependencySelector;
36 import org.eclipse.aether.internal.impl.scope.ScopeDependencySelector;
37 import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
38 import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
39 import org.eclipse.aether.util.artifact.JavaScopes;
40 import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
41 import org.eclipse.aether.util.graph.selector.AndDependencySelector;
42 import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
43 import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
44 import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
45 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
46 import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner;
47 import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
48 import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
49 import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
50 import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser;
51 import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
52
53 import static java.util.Objects.requireNonNull;
54
55
56
57
58
59
60
61
62
63
64
65
66 public class SessionBuilderSupplier implements Supplier<SessionBuilder> {
67 protected final RepositorySystem repositorySystem;
68
69 public SessionBuilderSupplier(RepositorySystem repositorySystem) {
70 this.repositorySystem = requireNonNull(repositorySystem);
71 }
72
73 protected void configureSessionBuilder(SessionBuilder session) {
74 session.setSystemProperties(System.getProperties());
75 boolean caseSensitive = !Os.IS_WINDOWS;
76 System.getenv().forEach((key, value) -> {
77 key = "env." + (caseSensitive ? key : key.toUpperCase(Locale.ENGLISH));
78 session.setSystemProperty(key, value);
79 });
80 session.setDependencyTraverser(getDependencyTraverser());
81 session.setDependencyManager(getDependencyManager());
82 session.setDependencySelector(getDependencySelector());
83 session.setDependencyGraphTransformer(getDependencyGraphTransformer());
84 session.setArtifactTypeRegistry(getArtifactTypeRegistry());
85 session.setArtifactDescriptorPolicy(getArtifactDescriptorPolicy());
86 }
87
88 protected DependencyTraverser getDependencyTraverser() {
89 return new FatArtifactTraverser();
90 }
91
92 protected DependencyManager getDependencyManager() {
93 return new ClassicDependencyManager(false, null);
94 }
95
96 protected DependencySelector getDependencySelector() {
97 return new AndDependencySelector(
98 ScopeDependencySelector.legacy(null, Arrays.asList(JavaScopes.TEST, JavaScopes.PROVIDED)),
99 OptionalDependencySelector.fromDirect(),
100 new ExclusionDependencySelector());
101 }
102
103 protected DependencyGraphTransformer getDependencyGraphTransformer() {
104 return new ChainedDependencyGraphTransformer(
105 new ConflictResolver(
106 new ConfigurableVersionSelector(), new JavaScopeSelector(),
107 new SimpleOptionalitySelector(), new JavaScopeDeriver()),
108 new JavaDependencyContextRefiner());
109 }
110
111 protected ArtifactTypeRegistry getArtifactTypeRegistry() {
112 DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
113 stereotypes.add(new DefaultArtifactType("pom"));
114 stereotypes.add(new DefaultArtifactType("maven-plugin", "jar", "", "java"));
115 stereotypes.add(new DefaultArtifactType("jar", "jar", "", "java"));
116 stereotypes.add(new DefaultArtifactType("ejb", "jar", "", "java"));
117 stereotypes.add(new DefaultArtifactType("ejb-client", "jar", "client", "java"));
118 stereotypes.add(new DefaultArtifactType("test-jar", "jar", "tests", "java"));
119 stereotypes.add(new DefaultArtifactType("javadoc", "jar", "javadoc", "java"));
120 stereotypes.add(new DefaultArtifactType("java-source", "jar", "sources", "java", false, false));
121 stereotypes.add(new DefaultArtifactType("war", "war", "", "java", false, true));
122 stereotypes.add(new DefaultArtifactType("ear", "ear", "", "java", false, true));
123 stereotypes.add(new DefaultArtifactType("rar", "rar", "", "java", false, true));
124 stereotypes.add(new DefaultArtifactType("par", "par", "", "java", false, true));
125 return stereotypes;
126 }
127
128 protected ArtifactDescriptorPolicy getArtifactDescriptorPolicy() {
129 return new SimpleArtifactDescriptorPolicy(true, true);
130 }
131
132
133
134
135
136
137
138
139
140
141
142 @Override
143 public SessionBuilder get() {
144 SessionBuilder builder = repositorySystem.createSessionBuilder();
145 configureSessionBuilder(builder);
146 return builder;
147 }
148 }