1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.release;
20
21 import java.io.File;
22 import java.util.Map;
23
24 import org.apache.maven.artifact.ArtifactUtils;
25 import org.apache.maven.model.Scm;
26 import org.apache.maven.plugin.MojoExecutionException;
27 import org.apache.maven.plugin.MojoFailureException;
28 import org.apache.maven.plugins.annotations.Parameter;
29 import org.apache.maven.project.MavenProject;
30 import org.apache.maven.scm.manager.ScmManager;
31 import org.apache.maven.shared.release.ReleaseManager;
32 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
33
34
35
36
37 public abstract class AbstractScmReadReleaseMojo extends AbstractReleaseMojo {
38
39
40
41
42
43
44
45
46
47
48
49
50 @Parameter(property = "project.scm.id", defaultValue = "${project.scm.id}")
51 private String serverId;
52
53
54
55
56
57 @Parameter(property = "username")
58 private String username;
59
60
61
62
63
64 @Parameter(property = "password")
65 private String password;
66
67
68
69
70
71
72 @Parameter(property = "privateKey")
73 private File privateKey;
74
75
76
77
78
79
80
81
82
83
84 @Parameter
85 private Map<String, String> providerImplementations;
86
87
88
89
90 @Parameter(defaultValue = "true", property = "scmShallowClone")
91 private boolean scmShallowClone = true;
92
93
94
95
96 private final ScmManager scmManager;
97
98 protected AbstractScmReadReleaseMojo(ReleaseManager releaseManager, ScmManager scmManager) {
99 super(releaseManager);
100 this.scmManager = scmManager;
101 }
102
103 @Override
104 public void execute() throws MojoExecutionException, MojoFailureException {
105 if (providerImplementations != null) {
106 for (Map.Entry<String, String> providerEntry : providerImplementations.entrySet()) {
107 getLog().info("Change the default '" + providerEntry.getKey() + "' provider implementation to '"
108 + providerEntry.getValue() + "'.");
109 scmManager.setScmProviderImplementation(providerEntry.getKey(), providerEntry.getValue());
110 }
111 }
112 }
113
114 @Override
115 protected ReleaseDescriptorBuilder createReleaseDescriptor() {
116 ReleaseDescriptorBuilder descriptor = super.createReleaseDescriptor();
117
118 if (privateKey != null) {
119 descriptor.setScmPrivateKey(privateKey.getAbsolutePath());
120 }
121 descriptor.setScmPassword(password);
122 descriptor.setScmUsername(username);
123 descriptor.setScmShallowClone(scmShallowClone);
124
125 if (project.getScm() != null) {
126 if (project.getScm().getDeveloperConnection() != null) {
127 descriptor.setScmSourceUrl(project.getScm().getDeveloperConnection());
128 } else if (project.getScm().getConnection() != null) {
129 descriptor.setScmSourceUrl(project.getScm().getConnection());
130 }
131 }
132
133 descriptor.setScmId(serverId);
134
135 for (MavenProject reactorProject : session.getProjects()) {
136 if (reactorProject.getOriginalModel() != null
137 && reactorProject.getOriginalModel().getScm() != null) {
138 String projectId =
139 ArtifactUtils.versionlessKey(reactorProject.getGroupId(), reactorProject.getArtifactId());
140
141 descriptor.addOriginalScmInfo(projectId, buildScm(reactorProject));
142 }
143 }
144
145 return descriptor;
146 }
147
148
149
150
151
152
153
154 protected Scm buildScm(MavenProject project) {
155 Scm scm;
156 if (project.getOriginalModel().getScm() == null) {
157 scm = null;
158 } else {
159 scm = new Scm();
160 scm.setConnection(project.getOriginalModel().getScm().getConnection());
161 scm.setDeveloperConnection(project.getOriginalModel().getScm().getDeveloperConnection());
162 scm.setTag(project.getOriginalModel().getScm().getTag());
163 scm.setUrl(project.getOriginalModel().getScm().getUrl());
164 }
165 return scm;
166 }
167 }