1 package org.apache.maven.project; 2 3 18 19 import org.apache.maven.artifact.Artifact; 20 import org.apache.maven.artifact.InvalidRepositoryException; 21 import org.apache.maven.artifact.factory.ArtifactFactory; 22 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; 23 import org.apache.maven.artifact.metadata.ArtifactMetadataSource; 24 import org.apache.maven.artifact.metadata.ResolutionGroup; 25 import org.apache.maven.artifact.repository.ArtifactRepository; 26 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; 27 import org.apache.maven.artifact.resolver.ArtifactNotFoundException; 28 import org.apache.maven.artifact.resolver.ArtifactResolutionException; 29 import org.apache.maven.artifact.resolver.ArtifactResolutionResult; 30 import org.apache.maven.artifact.resolver.DefaultArtifactResolver; 31 import org.apache.maven.artifact.resolver.filter.ArtifactFilter; 32 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; 33 import org.apache.maven.artifact.versioning.VersionRange; 34 import org.apache.maven.model.Dependency; 35 import org.apache.maven.model.Model; 36 import org.apache.maven.model.io.xpp3.MavenXpp3Reader; 37 import org.codehaus.plexus.PlexusConstants; 38 import org.codehaus.plexus.PlexusContainer; 39 import org.codehaus.plexus.context.Context; 40 import org.codehaus.plexus.context.ContextException; 41 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; 42 import org.codehaus.plexus.util.IOUtil; 43 import org.codehaus.plexus.util.StringUtils; 44 import org.codehaus.plexus.util.xml.pull.XmlPullParserException; 45 46 import java.io.File ; 47 import java.io.IOException ; 48 import java.io.InputStreamReader ; 49 import java.util.HashSet ; 50 import java.util.Iterator ; 51 import java.util.List ; 52 import java.util.Set ; 53 54 public class TestArtifactResolver 55 extends DefaultArtifactResolver 56 implements Contextualizable 57 { 58 public static final String ROLE = TestArtifactResolver.class.getName(); 59 60 private ArtifactRepositoryFactory repositoryFactory; 61 62 private PlexusContainer container; 63 64 static class Source 65 implements ArtifactMetadataSource 66 { 67 private ArtifactFactory artifactFactory; 68 69 private final ArtifactRepositoryFactory repositoryFactory; 70 71 private final PlexusContainer container; 72 73 public Source( ArtifactFactory artifactFactory, ArtifactRepositoryFactory repositoryFactory, 74 PlexusContainer container ) 75 { 76 this.artifactFactory = artifactFactory; 77 this.repositoryFactory = repositoryFactory; 78 this.container = container; 79 } 80 81 public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository, 82 List remoteRepositories ) 83 throws ArtifactMetadataRetrievalException 84 { 85 Model model = null; 86 InputStreamReader r = null; 87 try 88 { 89 String scope = artifact.getArtifactId().substring( "scope-".length() ); 90 if ( "maven-test".equals( artifact.getGroupId() ) ) 91 { 92 String name = "/projects/scope/transitive-" + scope + "-dep.xml"; 93 r = new InputStreamReader ( getClass().getResourceAsStream( name ) ); 94 MavenXpp3Reader reader = new MavenXpp3Reader(); 95 model = reader.read( r ); 96 } 97 else 98 { 99 model = new Model(); 100 } 101 model.setGroupId( artifact.getGroupId() ); 102 model.setArtifactId( artifact.getArtifactId() ); 103 } 104 catch ( IOException e ) 105 { 106 throw new ArtifactMetadataRetrievalException( e ); 107 } 108 catch ( XmlPullParserException e ) 109 { 110 throw new ArtifactMetadataRetrievalException( e ); 111 } 112 finally 113 { 114 IOUtil.close( r ); 115 } 116 117 Set artifacts; 118 try 119 { 120 artifacts = createArtifacts( model.getDependencies(), artifact.getScope() ); 121 } 122 catch ( InvalidVersionSpecificationException e ) 123 { 124 throw new ArtifactMetadataRetrievalException( e ); 125 } 126 127 List artifactRepositories; 128 try 129 { 130 artifactRepositories = 131 ProjectUtils.buildArtifactRepositories( model.getRepositories(), repositoryFactory, container ); 132 } 133 catch ( InvalidRepositoryException e ) 134 { 135 throw new ArtifactMetadataRetrievalException( e ); 136 } 137 138 return new ResolutionGroup( artifact, artifacts, artifactRepositories ); 139 } 140 141 public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, 142 List remoteRepositories ) 143 { 144 throw new UnsupportedOperationException ( "Cannot get available versions in this test case" ); 145 } 146 147 protected Set createArtifacts( List dependencies, String inheritedScope ) 148 throws InvalidVersionSpecificationException 149 { 150 Set projectArtifacts = new HashSet (); 151 152 for ( Iterator i = dependencies.iterator(); i.hasNext(); ) 153 { 154 Dependency d = (Dependency) i.next(); 155 156 String scope = d.getScope(); 157 158 if ( StringUtils.isEmpty( scope ) ) 159 { 160 scope = Artifact.SCOPE_COMPILE; 161 162 d.setScope( scope ); 163 } 164 165 VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() ); 166 Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), 167 versionRange, d.getType(), 168 d.getClassifier(), scope, 169 inheritedScope ); 170 if ( artifact != null ) 171 { 172 projectArtifacts.add( artifact ); 173 } 174 } 175 176 return projectArtifacts; 177 } 178 } 179 180 public Source source() 181 { 182 return new Source( artifactFactory, repositoryFactory, container ); 183 } 184 185 188 public void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository ) 189 throws ArtifactResolutionException 190 { 191 artifact.setFile( new File ( "dummy" ) ); 192 } 193 194 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 195 ArtifactRepository localRepository, List remoteRepositories, 196 ArtifactMetadataSource source, ArtifactFilter filter ) 197 throws ArtifactResolutionException, ArtifactNotFoundException 198 { 199 return super.resolveTransitively( artifacts, originatingArtifact, localRepository, remoteRepositories, 200 new Source( artifactFactory, repositoryFactory, container ), filter ); 201 } 202 203 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 204 List remoteRepositories, ArtifactRepository localRepository, 205 ArtifactMetadataSource source ) 206 throws ArtifactResolutionException, ArtifactNotFoundException 207 { 208 return super.resolveTransitively( artifacts, originatingArtifact, remoteRepositories, localRepository, 209 new Source( artifactFactory, repositoryFactory, container ) ); 210 } 211 212 public void contextualize( Context context ) 213 throws ContextException 214 { 215 this.container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); 216 } 217 218 } | Popular Tags |