-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathResolver.java
More file actions
107 lines (96 loc) · 4.44 KB
/
Resolver.java
File metadata and controls
107 lines (96 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package org.codejive.jpm.util;
import eu.maveniverse.maven.mima.context.Context;
import eu.maveniverse.maven.mima.context.ContextOverrides;
import eu.maveniverse.maven.mima.context.Runtime;
import eu.maveniverse.maven.mima.context.Runtimes;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.eclipse.aether.resolution.DependencyResult;
import org.eclipse.aether.util.artifact.JavaScopes;
public class Resolver {
private final List<Artifact> artifacts;
private final List<RemoteRepository> repositories;
private final Path cacheDir;
private List<ArtifactResult> resolvedArtifacts;
public static Resolver create(
String[] artifactNames, Map<String, String> repositories, Path cacheDir) {
return new Resolver(artifactNames, repositories, cacheDir);
}
private Resolver(String[] artifactNames, Map<String, String> repos, Path cacheDir) {
artifacts = parseArtifacts(artifactNames);
repositories = parseRepositories(repos);
this.cacheDir = cacheDir;
}
public List<ArtifactResult> resolve() throws DependencyResolutionException {
if (resolvedArtifacts == null) {
resolvedArtifacts = resolveArtifacts(artifacts, repositories, cacheDir);
}
return resolvedArtifacts;
}
public List<Path> resolvePaths() throws DependencyResolutionException {
List<ArtifactResult> ras = resolve();
return ras.stream()
.map(ar -> ar.getArtifact().getFile().toPath())
.collect(Collectors.toList());
}
/**
* Resolves the given artifacts.
*
* @param artifacts the artifacts to resolve as a list of {@link Artifact} instances
* @return the resolved artifacts as a list of {@link ArtifactResult} instances
* @throws DependencyResolutionException if an error occurs while resolving the artifacts
*/
public static List<ArtifactResult> resolveArtifacts(
List<Artifact> artifacts, List<RemoteRepository> repositories, Path cacheDir)
throws DependencyResolutionException {
List<Dependency> dependencies =
artifacts.stream()
.map(a -> new Dependency(a, JavaScopes.RUNTIME))
.collect(Collectors.toList());
ContextOverrides.Builder ctxb =
ContextOverrides.create()
.withUserSettings(true)
.withLocalRepositoryOverride(cacheDir);
if (repositories != null && !repositories.isEmpty()) {
ctxb.repositories(repositories);
}
ContextOverrides overrides = ctxb.build();
Runtime runtime = Runtimes.INSTANCE.getRuntime();
try (Context context = runtime.create(overrides)) {
CollectRequest collectRequest =
new CollectRequest()
.setDependencies(dependencies)
.setRepositories(context.remoteRepositories());
DependencyRequest dependencyRequest =
new DependencyRequest().setCollectRequest(collectRequest);
DependencyResult dependencyResult =
context.repositorySystem()
.resolveDependencies(
context.repositorySystemSession(), dependencyRequest);
return dependencyResult.getArtifactResults();
}
}
private static List<Artifact> parseArtifacts(String[] artifactNames) {
return Arrays.stream(artifactNames).map(DefaultArtifact::new).collect(Collectors.toList());
}
private static List<RemoteRepository> parseRepositories(Map<String, String> repositories) {
if (repositories == null) {
return Collections.emptyList();
}
return repositories.entrySet().stream()
.map(e -> new RemoteRepository.Builder(e.getKey(), "default", e.getValue()).build())
.collect(Collectors.toList());
}
}