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.util.List;
22
23 import org.apache.maven.resolver.examples.util.Booter;
24 import org.eclipse.aether.RepositorySystem;
25 import org.eclipse.aether.RepositorySystemSession.CloseableSession;
26 import org.eclipse.aether.RepositorySystemSession.SessionBuilder;
27 import org.eclipse.aether.artifact.DefaultArtifact;
28 import org.eclipse.aether.collection.CollectRequest;
29 import org.eclipse.aether.collection.CollectResult;
30 import org.eclipse.aether.graph.Dependency;
31 import org.eclipse.aether.graph.DependencyNode;
32 import org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector;
33 import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
34 import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
35 import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
36 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
37 import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner;
38 import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
39 import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
40 import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
41 import org.eclipse.aether.util.graph.visitor.DependencyGraphDumper;
42
43
44
45
46 public class GetDependencyHierarchyWithConflictsStrategies {
47
48
49
50
51
52
53 public static void main(String[] args) throws Exception {
54 System.out.println("------------------------------------------------------------");
55 System.out.println(GetDependencyHierarchyWithConflictsStrategies.class.getSimpleName());
56
57 CollectRequest collectRequest;
58
59
60 collectRequest = new CollectRequest();
61 collectRequest.setRootArtifact(new DefaultArtifact("demo:demo:1.0"));
62 collectRequest.setDependencies(
63 List.of(new Dependency(new DefaultArtifact("com.squareup.okhttp3:okhttp:jar:4.12.0"), "compile")));
64 runItWithStrategy(args, ConfigurableVersionSelector.NEAREST_SELECTION_STRATEGY, collectRequest);
65 runItWithStrategy(args, ConfigurableVersionSelector.HIGHEST_SELECTION_STRATEGY, collectRequest);
66
67
68 collectRequest = new CollectRequest();
69 collectRequest.setRootArtifact(new DefaultArtifact("demo:demo:1.0"));
70 collectRequest.setDependencies(List.of(
71 new Dependency(new DefaultArtifact("org.seleniumhq.selenium:selenium-java:jar:3.0.1"), "test")));
72 collectRequest.setManagedDependencies(List.of(
73 new Dependency(new DefaultArtifact("org.seleniumhq.selenium:selenium-java:jar:3.0.1"), "test"),
74 new Dependency(new DefaultArtifact("org.seleniumhq.selenium:selenium-remote-driver:jar:3.0.1"), "test"),
75 new Dependency(new DefaultArtifact("com.codeborne:phantomjsdriver:jar:1.3.0"), "test")));
76 runItWithStrategy(args, ConfigurableVersionSelector.NEAREST_SELECTION_STRATEGY, collectRequest);
77 runItWithStrategy(args, ConfigurableVersionSelector.HIGHEST_SELECTION_STRATEGY, collectRequest);
78 }
79
80 private static void runItWithStrategy(String[] args, String selectionStrategy, CollectRequest collectRequest)
81 throws Exception {
82 System.out.println();
83 System.out.println(selectionStrategy);
84 try (RepositorySystem system = Booter.newRepositorySystem(Booter.selectFactory(args))) {
85 SessionBuilder sessionBuilder = Booter.newRepositorySystemSession(system, Booter.selectFs(args));
86 sessionBuilder.setConfigProperty(ConflictResolver.CONFIG_PROP_VERBOSE, ConflictResolver.Verbosity.STANDARD);
87 sessionBuilder.setConfigProperty(DependencyManagerUtils.CONFIG_PROP_VERBOSE, true);
88 sessionBuilder.setConfigProperty(
89 ConfigurableVersionSelector.CONFIG_PROP_SELECTION_STRATEGY, selectionStrategy);
90 sessionBuilder.setConfigProperty(
91 BfDependencyCollector.CONFIG_PROP_SKIPPER, BfDependencyCollector.VERSIONED_SKIPPER);
92 try (CloseableSession session = sessionBuilder
93 .setDependencyGraphTransformer(new ChainedDependencyGraphTransformer(
94 new ConflictResolver(
95 new ConfigurableVersionSelector(),
96 new JavaScopeSelector(),
97 new SimpleOptionalitySelector(),
98 new JavaScopeDeriver()),
99 new JavaDependencyContextRefiner()))
100 .setRepositoryListener(null)
101 .setTransferListener(null)
102 .build()) {
103
104 collectRequest.setRepositories(Booter.newRepositories(system, session));
105
106 CollectResult result = system.collectDependencies(session, collectRequest);
107 System.out.println("tree:");
108 result.getRoot().accept(new DependencyGraphDumper(System.out::println));
109
110 List<DependencyNode> selected =
111 system.flattenDependencyNodes(session, result.getRoot(), (node, parents) -> !node.getData()
112 .containsKey(ConflictResolver.NODE_DATA_WINNER));
113 System.out.println("cp:");
114 selected.forEach(System.out::println);
115 }
116 }
117 }
118 }