001package org.apache.maven.resolver.examples.resolver; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import java.io.ByteArrayOutputStream; 023import java.io.PrintStream; 024 025import org.apache.maven.resolver.examples.util.Booter; 026import org.apache.maven.resolver.examples.util.ConsoleDependencyGraphDumper; 027import org.eclipse.aether.DefaultRepositorySystemSession; 028import org.eclipse.aether.RepositorySystem; 029import org.eclipse.aether.RepositorySystemSession; 030import org.eclipse.aether.artifact.Artifact; 031import org.eclipse.aether.artifact.DefaultArtifact; 032import org.eclipse.aether.collection.CollectRequest; 033import org.eclipse.aether.deployment.DeployRequest; 034import org.eclipse.aether.deployment.DeploymentException; 035import org.eclipse.aether.graph.Dependency; 036import org.eclipse.aether.graph.DependencyNode; 037import org.eclipse.aether.installation.InstallRequest; 038import org.eclipse.aether.installation.InstallationException; 039import org.eclipse.aether.repository.Authentication; 040import org.eclipse.aether.repository.LocalRepository; 041import org.eclipse.aether.repository.RemoteRepository; 042import org.eclipse.aether.resolution.DependencyRequest; 043import org.eclipse.aether.resolution.DependencyResolutionException; 044import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator; 045import org.eclipse.aether.util.repository.AuthenticationBuilder; 046 047/** 048 */ 049public class Resolver 050{ 051 private final String remoteRepository; 052 053 private final RepositorySystem repositorySystem; 054 055 private final LocalRepository localRepository; 056 057 public Resolver( String factory, String remoteRepository, String localRepository ) 058 { 059 this.remoteRepository = remoteRepository; 060 this.repositorySystem = Booter.newRepositorySystem( factory ); 061 this.localRepository = new LocalRepository( localRepository ); 062 } 063 064 private RepositorySystemSession newSession() 065 { 066 DefaultRepositorySystemSession session = Booter.newRepositorySystemSession( repositorySystem ); 067 session.setLocalRepositoryManager( repositorySystem.newLocalRepositoryManager( session, localRepository ) ); 068 session.setTransferListener( null ); 069 session.setRepositoryListener( null ); 070 return session; 071 } 072 073 public ResolverResult resolve( String groupId, String artifactId, String version ) 074 throws DependencyResolutionException 075 { 076 RepositorySystemSession session = newSession(); 077 Dependency dependency = 078 new Dependency( new DefaultArtifact( groupId, artifactId, "", "jar", version ), "runtime" ); 079 RemoteRepository central = new RemoteRepository.Builder( "central", "default", remoteRepository ).build(); 080 081 CollectRequest collectRequest = new CollectRequest(); 082 collectRequest.setRoot( dependency ); 083 collectRequest.addRepository( central ); 084 085 DependencyRequest dependencyRequest = new DependencyRequest(); 086 dependencyRequest.setCollectRequest( collectRequest ); 087 088 DependencyNode rootNode = repositorySystem.resolveDependencies( session, dependencyRequest ).getRoot(); 089 090 StringBuilder dump = new StringBuilder(); 091 displayTree( rootNode, dump ); 092 System.out.println( "Tree:" ); 093 System.out.println( dump ); 094 095 PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); 096 rootNode.accept( nlg ); 097 098 return new ResolverResult( rootNode, nlg.getFiles(), nlg.getClassPath() ); 099 } 100 101 public void install( Artifact artifact, Artifact pom ) 102 throws InstallationException 103 { 104 RepositorySystemSession session = newSession(); 105 106 InstallRequest installRequest = new InstallRequest(); 107 installRequest.addArtifact( artifact ).addArtifact( pom ); 108 109 repositorySystem.install( session, installRequest ); 110 } 111 112 public void deploy( Artifact artifact, Artifact pom, String remoteRepository ) 113 throws DeploymentException 114 { 115 RepositorySystemSession session = newSession(); 116 117 Authentication auth = new AuthenticationBuilder().addUsername( "admin" ).addPassword( "admin123" ).build(); 118 RemoteRepository nexus = 119 new RemoteRepository.Builder( "nexus", "default", remoteRepository ).setAuthentication( auth ).build(); 120 121 DeployRequest deployRequest = new DeployRequest(); 122 deployRequest.addArtifact( artifact ).addArtifact( pom ); 123 deployRequest.setRepository( nexus ); 124 125 repositorySystem.deploy( session, deployRequest ); 126 } 127 128 private void displayTree( DependencyNode node, StringBuilder sb ) 129 { 130 ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 ); 131 node.accept( new ConsoleDependencyGraphDumper( new PrintStream( os ) ) ); 132 sb.append( os.toString() ); 133 } 134 135}