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 org.apache.maven.resolver.examples.util.Booter;
22 import org.eclipse.aether.RepositorySystem;
23 import org.eclipse.aether.RepositorySystemSession.CloseableSession;
24 import org.eclipse.aether.RepositorySystemSession.SessionBuilder;
25 import org.eclipse.aether.artifact.Artifact;
26 import org.eclipse.aether.artifact.DefaultArtifact;
27 import org.eclipse.aether.collection.CollectRequest;
28 import org.eclipse.aether.collection.UnsolvableVersionConflictException;
29 import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
30 import org.eclipse.aether.resolution.ArtifactDescriptorResult;
31 import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
32 import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
33 import org.eclipse.aether.util.graph.transformer.ClassicConflictResolver;
34 import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector;
35 import org.eclipse.aether.util.graph.transformer.ConflictResolver;
36 import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner;
37 import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
38 import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
39 import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
40
41
42
43
44 public class GetDependencyHierarchyWithConflicts {
45
46
47
48
49
50
51 public static void main(String[] args) throws Exception {
52 System.out.println("------------------------------------------------------------");
53 System.out.println(GetDependencyHierarchyWithConflicts.class.getSimpleName());
54
55
56 try (RepositorySystem system = Booter.newRepositorySystem(Booter.selectFactory(args))) {
57 SessionBuilder sessionBuilder = Booter.newRepositorySystemSession(system);
58 sessionBuilder.setConfigProperty(ConflictResolver.CONFIG_PROP_VERBOSE, true);
59 sessionBuilder.setConfigProperty(DependencyManagerUtils.CONFIG_PROP_VERBOSE, true);
60 try (CloseableSession session = sessionBuilder
61 .setDependencyGraphTransformer(new ChainedDependencyGraphTransformer(
62 new ClassicConflictResolver(
63 new ConfigurableVersionSelector(
64 new ConfigurableVersionSelector.MajorVersionConvergence(
65 new ConfigurableVersionSelector.Nearest())),
66 new JavaScopeSelector(),
67 new SimpleOptionalitySelector(),
68 new JavaScopeDeriver()),
69 new JavaDependencyContextRefiner()))
70 .build()) {
71 Artifact artifact = new DefaultArtifact("org.apache.maven.shared:maven-dependency-tree:3.0.1");
72
73 ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
74 descriptorRequest.setArtifact(artifact);
75 descriptorRequest.setRepositories(Booter.newRepositories(system, session));
76 ArtifactDescriptorResult descriptorResult = system.readArtifactDescriptor(session, descriptorRequest);
77
78 CollectRequest collectRequest = new CollectRequest();
79 collectRequest.setRootArtifact(descriptorResult.getArtifact());
80 collectRequest.setDependencies(descriptorResult.getDependencies());
81 collectRequest.setManagedDependencies(descriptorResult.getManagedDependencies());
82 collectRequest.setRepositories(descriptorRequest.getRepositories());
83
84 system.collectDependencies(session, collectRequest);
85 throw new IllegalStateException("should fail");
86 }
87 } catch (Exception e) {
88 e.printStackTrace();
89 if (e.getCause() instanceof UnsolvableVersionConflictException) {
90 String cause = e.getCause().getMessage();
91 if (!cause.contains(
92 "Incompatible versions for org.apache.maven:maven-core, incompatible versions: [2.0], all versions [2.0, 3.0.4]")) {
93 throw new IllegalStateException("should fail due incompatible versions");
94 }
95 } else {
96 throw new IllegalStateException("should fail due incompatible versions");
97 }
98 }
99
100
101 try (RepositorySystem system = Booter.newRepositorySystem(Booter.selectFactory(args))) {
102 SessionBuilder sessionBuilder = Booter.newRepositorySystemSession(system);
103 sessionBuilder.setConfigProperty(ConflictResolver.CONFIG_PROP_VERBOSE, true);
104 sessionBuilder.setConfigProperty(DependencyManagerUtils.CONFIG_PROP_VERBOSE, true);
105 try (CloseableSession session = sessionBuilder
106 .setDependencyGraphTransformer(new ChainedDependencyGraphTransformer(
107 new ClassicConflictResolver(
108 new ConfigurableVersionSelector(new ConfigurableVersionSelector.VersionConvergence(
109 new ConfigurableVersionSelector.Nearest())),
110 new JavaScopeSelector(),
111 new SimpleOptionalitySelector(),
112 new JavaScopeDeriver()),
113 new JavaDependencyContextRefiner()))
114 .build()) {
115 Artifact artifact = new DefaultArtifact("org.apache.maven.shared:maven-dependency-tree:3.1.0");
116
117 ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
118 descriptorRequest.setArtifact(artifact);
119 descriptorRequest.setRepositories(Booter.newRepositories(system, session));
120 ArtifactDescriptorResult descriptorResult = system.readArtifactDescriptor(session, descriptorRequest);
121
122 CollectRequest collectRequest = new CollectRequest();
123 collectRequest.setRootArtifact(descriptorResult.getArtifact());
124 collectRequest.setDependencies(descriptorResult.getDependencies());
125 collectRequest.setManagedDependencies(descriptorResult.getManagedDependencies());
126 collectRequest.setRepositories(descriptorRequest.getRepositories());
127
128 system.collectDependencies(session, collectRequest);
129 throw new IllegalStateException("should fail");
130 }
131 } catch (Exception e) {
132 e.printStackTrace();
133 if (e.getCause() instanceof UnsolvableVersionConflictException) {
134 String cause = e.getCause().getMessage();
135 if (!cause.contains(
136 "Convergence violated for org.codehaus.plexus:plexus-utils, versions present: [2.1, 1.5.5, 2.0.6]")) {
137 throw new IllegalStateException("should fail due convergence violation");
138 }
139 } else {
140 throw new IllegalStateException("should fail due convergence violation");
141 }
142 }
143 }
144 }