View Javadoc
1   package org.apache.maven.resolver.examples.resolver;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   * 
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   * 
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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 String remoteRepository;
52  
53      private RepositorySystem repositorySystem;
54  
55      private LocalRepository localRepository;
56  
57      public Resolver( String remoteRepository, String localRepository )
58      {
59          this.remoteRepository = remoteRepository;
60          this.repositorySystem = Booter.newRepositorySystem();
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 }