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