1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.resolver.examples;
20
21 import java.time.Duration;
22 import java.time.Instant;
23 import java.time.temporal.ChronoUnit;
24 import java.util.List;
25 import java.util.concurrent.CountDownLatch;
26 import java.util.concurrent.atomic.AtomicInteger;
27
28 import org.apache.maven.resolver.examples.util.Booter;
29 import org.eclipse.aether.DefaultRepositorySystemSession;
30 import org.eclipse.aether.RepositorySystem;
31 import org.eclipse.aether.RepositorySystemSession;
32 import org.eclipse.aether.artifact.Artifact;
33 import org.eclipse.aether.artifact.DefaultArtifact;
34 import org.eclipse.aether.collection.CollectRequest;
35 import org.eclipse.aether.graph.Dependency;
36 import org.eclipse.aether.repository.RemoteRepository;
37 import org.eclipse.aether.resolution.ArtifactResult;
38 import org.eclipse.aether.resolution.DependencyRequest;
39 import org.eclipse.aether.util.artifact.JavaScopes;
40
41
42
43
44
45
46 public class ResolveTransitiveDependenciesParallel {
47
48
49
50
51
52
53 public static void main(String[] args) throws Exception {
54 System.out.println("------------------------------------------------------------");
55 System.out.println(ResolveTransitiveDependencies.class.getSimpleName());
56
57 RepositorySystem system = Booter.newRepositorySystem(Booter.selectFactory(args));
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 DefaultRepositorySystemSession session = Booter.newRepositorySystemSession(system);
83 session.setConfigProperty("aether.syncContext.named.time", "210");
84 session.setTransferListener(null);
85 session.setRepositoryListener(null);
86
87 Artifact bigArtifact1 = new DefaultArtifact("org.bytedeco:llvm:jar:linux-arm64:16.0.4-1.5.9");
88 Artifact bigArtifact2 = new DefaultArtifact("org.bytedeco:llvm:jar:linux-armhf:16.0.4-1.5.9");
89 Artifact bigArtifact3 = new DefaultArtifact("org.bytedeco:llvm:jar:linux-ppc64le:16.0.4-1.5.9");
90 Artifact bigArtifact4 = new DefaultArtifact("org.bytedeco:llvm:jar:linux-x86:16.0.4-1.5.9");
91 Artifact bigArtifact5 = new DefaultArtifact("org.bytedeco:llvm:jar:linux-x86_64:16.0.4-1.5.9");
92 Artifact bigArtifact6 = new DefaultArtifact("org.bytedeco:llvm:jar:macosx-arm64:16.0.4-1.5.9");
93 Artifact bigArtifact7 = new DefaultArtifact("org.bytedeco:llvm:jar:macosx-x86_64:16.0.4-1.5.9");
94 Artifact bigArtifact8 = new DefaultArtifact("org.bytedeco:llvm:jar:windows-x86:16.0.4-1.5.9");
95 Artifact bigArtifact9 = new DefaultArtifact("org.bytedeco:llvm:jar:windows-x86_64:16.0.4-1.5.9");
96
97 CountDownLatch latch = new CountDownLatch(8);
98 AtomicInteger success = new AtomicInteger(0);
99 AtomicInteger fail = new AtomicInteger(0);
100
101 Thread thread1 = new Thread(resolveWithDependencies(
102 latch,
103 success,
104 fail,
105 system,
106 session,
107 Booter.newRepositories(system, session),
108 "org.example:test:1",
109 bigArtifact1,
110 bigArtifact2));
111 Thread thread2 = new Thread(resolveWithDependencies(
112 latch,
113 success,
114 fail,
115 system,
116 session,
117 Booter.newRepositories(system, session),
118 "org.example:test:2",
119 bigArtifact2,
120 bigArtifact3));
121 Thread thread3 = new Thread(resolveWithDependencies(
122 latch,
123 success,
124 fail,
125 system,
126 session,
127 Booter.newRepositories(system, session),
128 "org.example:test:3",
129 bigArtifact3,
130 bigArtifact4));
131 Thread thread4 = new Thread(resolveWithDependencies(
132 latch,
133 success,
134 fail,
135 system,
136 session,
137 Booter.newRepositories(system, session),
138 "org.example:test:4",
139 bigArtifact4,
140 bigArtifact5));
141 Thread thread5 = new Thread(resolveWithDependencies(
142 latch,
143 success,
144 fail,
145 system,
146 session,
147 Booter.newRepositories(system, session),
148 "org.example:test:5",
149 bigArtifact5,
150 bigArtifact6));
151 Thread thread6 = new Thread(resolveWithDependencies(
152 latch,
153 success,
154 fail,
155 system,
156 session,
157 Booter.newRepositories(system, session),
158 "org.example:test:6",
159 bigArtifact6,
160 bigArtifact7));
161 Thread thread7 = new Thread(resolveWithDependencies(
162 latch,
163 success,
164 fail,
165 system,
166 session,
167 Booter.newRepositories(system, session),
168 "org.example:test:7",
169 bigArtifact7,
170 bigArtifact8));
171 Thread thread8 = new Thread(resolveWithDependencies(
172 latch,
173 success,
174 fail,
175 system,
176 session,
177 Booter.newRepositories(system, session),
178 "org.example:test:8",
179 bigArtifact8,
180 bigArtifact9));
181
182 thread1.start();
183 thread2.start();
184 thread3.start();
185 thread4.start();
186 thread5.start();
187 thread6.start();
188 thread7.start();
189 thread8.start();
190
191 latch.await();
192
193 System.out.println("=====");
194 System.out.println("TOTAL success=" + success.get() + "; fail=" + fail.get());
195 }
196
197 @SuppressWarnings("checkstyle:parameternumber")
198 private static Runnable resolveWithDependencies(
199 CountDownLatch latch,
200 AtomicInteger success,
201 AtomicInteger fail,
202 RepositorySystem system,
203 RepositorySystemSession session,
204 List<RemoteRepository> repositories,
205 String gav,
206 Artifact... deps) {
207 return () -> {
208 try {
209 Instant now = Instant.now();
210 CollectRequest collectRequest = new CollectRequest();
211 collectRequest.setRootArtifact(new DefaultArtifact(gav));
212 for (Artifact dep : deps) {
213 collectRequest.addDependency(new Dependency(dep, JavaScopes.COMPILE));
214 }
215 collectRequest.setRepositories(repositories);
216 DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, null);
217 List<ArtifactResult> artifactResults =
218 system.resolveDependencies(session, dependencyRequest).getArtifactResults();
219 int resolved = 0;
220 int fails = 0;
221 for (ArtifactResult artifactResult : artifactResults) {
222 if (artifactResult.isResolved()) {
223 resolved++;
224 } else {
225 fails++;
226 }
227 }
228 String dur = Duration.between(now, Instant.now()).get(ChronoUnit.SECONDS) + " sec";
229 System.out.println("DONE (" + dur + "): " + gav + ": resolved " + resolved + "; failed " + fails);
230 success.getAndIncrement();
231 } catch (Exception e) {
232 System.out.println("FAILED " + gav + ": " + e.getMessage());
233 fail.getAndIncrement();
234 } finally {
235 latch.countDown();
236 }
237 };
238 }
239 }