1 package org.apache.maven.resolver.examples.resolver;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.ByteArrayOutputStream;
23 import java.io.PrintStream;
24
25 import org.apache.maven.resolver.examples.util.Booter;
26 import org.apache.maven.resolver.examples.util.ConsoleDependencyGraphDumper;
27 import org.eclipse.aether.DefaultRepositorySystemSession;
28 import org.eclipse.aether.RepositorySystem;
29 import org.eclipse.aether.RepositorySystemSession;
30 import org.eclipse.aether.artifact.Artifact;
31 import org.eclipse.aether.artifact.DefaultArtifact;
32 import org.eclipse.aether.collection.CollectRequest;
33 import org.eclipse.aether.deployment.DeployRequest;
34 import org.eclipse.aether.deployment.DeploymentException;
35 import org.eclipse.aether.graph.Dependency;
36 import org.eclipse.aether.graph.DependencyNode;
37 import org.eclipse.aether.installation.InstallRequest;
38 import org.eclipse.aether.installation.InstallationException;
39 import org.eclipse.aether.repository.Authentication;
40 import org.eclipse.aether.repository.LocalRepository;
41 import org.eclipse.aether.repository.RemoteRepository;
42 import org.eclipse.aether.resolution.DependencyRequest;
43 import org.eclipse.aether.resolution.DependencyResolutionException;
44 import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator;
45 import org.eclipse.aether.util.repository.AuthenticationBuilder;
46
47
48
49 public class Resolver
50 {
51 private final String remoteRepository;
52
53 private final RepositorySystem repositorySystem;
54
55 private final LocalRepository localRepository;
56
57 public Resolver( String factory, String remoteRepository, String localRepository )
58 {
59 this.remoteRepository = remoteRepository;
60 this.repositorySystem = Booter.newRepositorySystem( factory );
61 this.localRepository = new LocalRepository( localRepository );
62 }
63
64 private RepositorySystemSession newSession()
65 {
66 DefaultRepositorySystemSession session = Booter.newRepositorySystemSession( repositorySystem );
67 session.setLocalRepositoryManager( repositorySystem.newLocalRepositoryManager( session, localRepository ) );
68 return session;
69 }
70
71 public ResolverResult resolve( String groupId, String artifactId, String version )
72 throws DependencyResolutionException
73 {
74 RepositorySystemSession session = newSession();
75 Dependency dependency =
76 new Dependency( new DefaultArtifact( groupId, artifactId, "", "jar", version ), "runtime" );
77 RemoteRepository central = new RemoteRepository.Builder( "central", "default", remoteRepository ).build();
78
79 CollectRequest collectRequest = new CollectRequest();
80 collectRequest.setRoot( dependency );
81 collectRequest.addRepository( central );
82
83 DependencyRequest dependencyRequest = new DependencyRequest();
84 dependencyRequest.setCollectRequest( collectRequest );
85
86 DependencyNode rootNode = repositorySystem.resolveDependencies( session, dependencyRequest ).getRoot();
87
88 StringBuilder dump = new StringBuilder();
89 displayTree( rootNode, dump );
90
91 PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
92 rootNode.accept( nlg );
93
94 return new ResolverResult( rootNode, nlg.getFiles(), nlg.getClassPath() );
95 }
96
97 public void install( Artifact artifact, Artifact pom )
98 throws InstallationException
99 {
100 RepositorySystemSession session = newSession();
101
102 InstallRequest installRequest = new InstallRequest();
103 installRequest.addArtifact( artifact ).addArtifact( pom );
104
105 repositorySystem.install( session, installRequest );
106 }
107
108 public void deploy( Artifact artifact, Artifact pom, String remoteRepository )
109 throws DeploymentException
110 {
111 RepositorySystemSession session = newSession();
112
113 Authentication auth = new AuthenticationBuilder().addUsername( "admin" ).addPassword( "admin123" ).build();
114 RemoteRepository nexus =
115 new RemoteRepository.Builder( "nexus", "default", remoteRepository ).setAuthentication( auth ).build();
116
117 DeployRequest deployRequest = new DeployRequest();
118 deployRequest.addArtifact( artifact ).addArtifact( pom );
119 deployRequest.setRepository( nexus );
120
121 repositorySystem.deploy( session, deployRequest );
122 }
123
124 private void displayTree( DependencyNode node, StringBuilder sb )
125 {
126 ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
127 node.accept( new ConsoleDependencyGraphDumper( new PrintStream( os ) ) );
128 sb.append( os.toString() );
129 }
130
131 }