1 package org.apache.maven.artifact.resolver; 2 3 18 19 import org.apache.maven.artifact.Artifact; 20 import org.apache.maven.artifact.factory.ArtifactFactory; 21 import org.apache.maven.artifact.manager.WagonManager; 22 import org.apache.maven.artifact.metadata.ArtifactMetadataSource; 23 import org.apache.maven.artifact.repository.ArtifactRepository; 24 import org.apache.maven.artifact.resolver.filter.ArtifactFilter; 25 import org.apache.maven.artifact.transform.ArtifactTransformationManager; 26 import org.apache.maven.wagon.ResourceDoesNotExistException; 27 import org.apache.maven.wagon.TransferFailedException; 28 import org.codehaus.plexus.logging.AbstractLogEnabled; 29 import org.codehaus.plexus.util.FileUtils; 30 31 import java.io.File ; 32 import java.io.IOException ; 33 import java.util.ArrayList ; 34 import java.util.Collections ; 35 import java.util.Iterator ; 36 import java.util.List ; 37 import java.util.Map ; 38 import java.util.Set ; 39 40 public class DefaultArtifactResolver 41 extends AbstractLogEnabled 42 implements ArtifactResolver 43 { 44 48 private WagonManager wagonManager; 49 50 private ArtifactTransformationManager transformationManager; 51 52 protected ArtifactFactory artifactFactory; 53 54 private ArtifactCollector artifactCollector; 55 56 60 public void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository ) 61 throws ArtifactResolutionException, ArtifactNotFoundException 62 { 63 resolve( artifact, remoteRepositories, localRepository, false ); 64 } 65 66 public void resolveAlways( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository ) 67 throws ArtifactResolutionException, ArtifactNotFoundException 68 { 69 resolve( artifact, remoteRepositories, localRepository, true ); 70 } 71 72 private void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository, 73 boolean force ) 74 throws ArtifactResolutionException, ArtifactNotFoundException 75 { 76 if ( artifact != null ) 77 { 78 if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) ) 79 { 80 File systemFile = artifact.getFile(); 81 82 if ( !systemFile.exists() ) 83 { 84 throw new ArtifactNotFoundException( 85 "System artifact: " + artifact + " not found in path: " + systemFile, artifact ); 86 } 87 else 88 { 89 artifact.setResolved( true ); 90 } 91 } 92 else if ( !artifact.isResolved() ) 93 { 94 100 String localPath = localRepository.pathOf( artifact ); 101 102 artifact.setFile( new File ( localRepository.getBasedir(), localPath ) ); 103 104 transformationManager.transformForResolve( artifact, remoteRepositories, localRepository ); 105 106 File destination = artifact.getFile(); 107 boolean resolved = false; 108 if ( !destination.exists() || force ) 109 { 110 if ( !wagonManager.isOnline() ) 111 { 112 throw new ArtifactNotFoundException( "System is offline.", artifact ); 113 } 114 115 try 116 { 117 if ( artifact.getRepository() != null ) 118 { 119 wagonManager.getArtifact( artifact, artifact.getRepository() ); 121 } 122 else 123 { 124 wagonManager.getArtifact( artifact, remoteRepositories ); 125 } 126 127 if ( !artifact.isResolved() ) 128 { 129 throw new ArtifactResolutionException( 130 "Failed to resolve artifact, possibly due to a repository list that is not appropriately equipped for this artifact's metadata.", 131 artifact, remoteRepositories ); 132 } 133 } 134 catch ( ResourceDoesNotExistException e ) 135 { 136 throw new ArtifactNotFoundException( e.getMessage(), artifact, remoteRepositories, e ); 137 } 138 catch ( TransferFailedException e ) 139 { 140 throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e ); 141 } 142 143 resolved = true; 144 } 145 else if ( destination.exists() ) 146 { 147 artifact.setResolved( true ); 149 } 150 151 if ( artifact.isSnapshot() && !artifact.getBaseVersion().equals( artifact.getVersion() ) ) 152 { 153 String version = artifact.getVersion(); 154 artifact.selectVersion( artifact.getBaseVersion() ); 155 File copy = new File ( localRepository.getBasedir(), localRepository.pathOf( artifact ) ); 156 if ( resolved || !copy.exists() ) 157 { 158 try 160 { 161 FileUtils.copyFile( destination, copy ); 162 } 163 catch ( IOException e ) 164 { 165 throw new ArtifactResolutionException( 166 "Unable to copy resolved artifact for local use: " + e.getMessage(), artifact, 167 remoteRepositories, e ); 168 } 169 } 170 artifact.setFile( copy ); 171 artifact.selectVersion( version ); 172 } 173 } 174 } 175 } 176 177 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 178 ArtifactRepository localRepository, List remoteRepositories, 179 ArtifactMetadataSource source, ArtifactFilter filter ) 180 throws ArtifactResolutionException, ArtifactNotFoundException 181 { 182 return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository, 183 remoteRepositories, source, filter ); 184 185 } 186 187 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 188 Map managedVersions, ArtifactRepository localRepository, 189 List remoteRepositories, ArtifactMetadataSource source ) 190 throws ArtifactResolutionException, ArtifactNotFoundException 191 { 192 return resolveTransitively( artifacts, originatingArtifact, managedVersions, localRepository, 193 remoteRepositories, source, null ); 194 } 195 196 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 197 Map managedVersions, ArtifactRepository localRepository, 198 List remoteRepositories, ArtifactMetadataSource source, 199 ArtifactFilter filter ) 200 throws ArtifactResolutionException, ArtifactNotFoundException 201 { 202 List listeners = new ArrayList (); 204 if ( getLogger().isDebugEnabled() ) 205 { 206 listeners.add( new DebugResolutionListener( getLogger() ) ); 207 } 208 209 listeners.add( new WarningResolutionListener( getLogger() ) ); 210 211 return resolveTransitively( artifacts, originatingArtifact, managedVersions, localRepository, 212 remoteRepositories, source, filter, listeners ); 213 214 } 215 216 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 217 Map managedVersions, ArtifactRepository localRepository, 218 List remoteRepositories, ArtifactMetadataSource source, 219 ArtifactFilter filter, List listeners ) 220 throws ArtifactResolutionException, ArtifactNotFoundException 221 { 222 ArtifactResolutionResult artifactResolutionResult; 223 artifactResolutionResult = artifactCollector.collect( artifacts, originatingArtifact, managedVersions, 224 localRepository, remoteRepositories, source, filter, 225 listeners ); 226 227 List missingArtifacts = new ArrayList (); 228 for ( Iterator i = artifactResolutionResult.getArtifactResolutionNodes().iterator(); i.hasNext(); ) 229 { 230 ResolutionNode node = (ResolutionNode) i.next(); 231 try 232 { 233 resolve( node.getArtifact(), node.getRemoteRepositories(), localRepository ); 234 } 235 catch ( ArtifactNotFoundException anfe ) 236 { 237 getLogger().debug( anfe.getMessage() ); 238 missingArtifacts.add( node.getArtifact() ); 239 } 240 } 241 242 if ( missingArtifacts.size() > 0 ) 243 { 244 throw new MultipleArtifactsNotFoundException( originatingArtifact, missingArtifacts, remoteRepositories ); 245 } 254 255 return artifactResolutionResult; 256 } 257 258 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 259 List remoteRepositories, ArtifactRepository localRepository, 260 ArtifactMetadataSource source ) 261 throws ArtifactResolutionException, ArtifactNotFoundException 262 { 263 return resolveTransitively( artifacts, originatingArtifact, localRepository, remoteRepositories, source, null ); 264 } 265 266 public ArtifactResolutionResult resolveTransitively( Set artifacts, Artifact originatingArtifact, 267 List remoteRepositories, ArtifactRepository localRepository, 268 ArtifactMetadataSource source, List listeners ) 269 throws ArtifactResolutionException, ArtifactNotFoundException 270 { 271 return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository, 272 remoteRepositories, source, null, listeners ); 273 } 274 275 } 276 | Popular Tags |