1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.repository.legacy.resolver.transform;
20
21 import java.util.List;
22 import org.apache.maven.artifact.Artifact;
23 import org.apache.maven.artifact.repository.ArtifactRepository;
24 import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
25 import org.apache.maven.artifact.repository.RepositoryRequest;
26 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
27 import org.apache.maven.artifact.repository.metadata.Metadata;
28 import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
29 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
30 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
31 import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
32 import org.apache.maven.artifact.repository.metadata.Versioning;
33 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
34 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
35 import org.apache.maven.repository.legacy.WagonManager;
36 import org.codehaus.plexus.component.annotations.Requirement;
37 import org.codehaus.plexus.logging.AbstractLogEnabled;
38
39
40
41
42
43
44
45 public abstract class AbstractVersionTransformation extends AbstractLogEnabled implements ArtifactTransformation {
46 @Requirement
47 protected RepositoryMetadataManager repositoryMetadataManager;
48
49 @Requirement
50 protected WagonManager wagonManager;
51
52 public void transformForResolve(
53 Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository)
54 throws ArtifactResolutionException, ArtifactNotFoundException {
55 RepositoryRequest request = new DefaultRepositoryRequest();
56 request.setLocalRepository(localRepository);
57 request.setRemoteRepositories(remoteRepositories);
58 transformForResolve(artifact, request);
59 }
60
61 protected String resolveVersion(
62 Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories)
63 throws RepositoryMetadataResolutionException {
64 RepositoryRequest request = new DefaultRepositoryRequest();
65 request.setLocalRepository(localRepository);
66 request.setRemoteRepositories(remoteRepositories);
67 return resolveVersion(artifact, request);
68 }
69
70 protected String resolveVersion(Artifact artifact, RepositoryRequest request)
71 throws RepositoryMetadataResolutionException {
72 RepositoryMetadata metadata;
73
74 if (!artifact.isSnapshot() || Artifact.LATEST_VERSION.equals(artifact.getBaseVersion())) {
75 metadata = new ArtifactRepositoryMetadata(artifact);
76 } else {
77 metadata = new SnapshotArtifactRepositoryMetadata(artifact);
78 }
79
80 repositoryMetadataManager.resolve(metadata, request);
81
82 artifact.addMetadata(metadata);
83
84 Metadata repoMetadata = metadata.getMetadata();
85 String version = null;
86 if (repoMetadata != null && repoMetadata.getVersioning() != null) {
87 version = constructVersion(repoMetadata.getVersioning(), artifact.getBaseVersion());
88 }
89
90 if (version == null) {
91
92 version = artifact.getBaseVersion();
93 }
94
95
96
97 if (getLogger().isDebugEnabled()) {
98 if (!version.equals(artifact.getBaseVersion())) {
99 String message = artifact.getArtifactId() + ": resolved to version " + version;
100 if (artifact.getRepository() != null) {
101 message += " from repository " + artifact.getRepository().getId();
102 } else {
103 message += " from local repository";
104 }
105 getLogger().debug(message);
106 } else {
107
108 getLogger().debug(artifact.getArtifactId() + ": using locally installed snapshot");
109 }
110 }
111 return version;
112 }
113
114 protected abstract String constructVersion(Versioning versioning, String baseVersion);
115 }