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
51 @Parameter(property = "project.scm.id", defaultValue = "${project.scm.id}")
52 private String serverId;
53
54
55
56
57
58
59 @Parameter(property = "username")
60 private String username;
61
62
63
64
65
66
67 @Parameter(property = "password")
68 private String password;
69
70
71
72
73
74
75
76 @Parameter(property = "privateKey")
77 private File privateKey;
78
79
80
81
82
83
84
85
86
87
88 @Parameter
89 private Map<String, String> providerImplementations;
90
91
92
93
94 @Parameter(defaultValue = "true", property = "scmShallowClone")
95 private boolean scmShallowClone = true;
96
97
98
99
100 private final ScmManager scmManager;
101
102 protected AbstractScmReadReleaseMojo(ReleaseManager releaseManager, ScmManager scmManager) {
103 super(releaseManager);
104 this.scmManager = scmManager;
105 }
106
107 @Override
108 public void execute() throws MojoExecutionException, MojoFailureException {
109 if (providerImplementations != null) {
110 for (Map.Entry<String, String> providerEntry : providerImplementations.entrySet()) {
111 getLog().info("Change the default '" + providerEntry.getKey() + "' provider implementation to '"
112 + providerEntry.getValue() + "'.");
113 scmManager.setScmProviderImplementation(providerEntry.getKey(), providerEntry.getValue());
114 }
115 }
116 }
117
118 @Override
119 protected ReleaseDescriptorBuilder createReleaseDescriptor() {
120 ReleaseDescriptorBuilder descriptor = super.createReleaseDescriptor();
121
122 if (privateKey != null) {
123 descriptor.setScmPrivateKey(privateKey.getAbsolutePath());
124 }
125 descriptor.setScmPassword(password);
126 descriptor.setScmUsername(username);
127 descriptor.setScmShallowClone(scmShallowClone);
128
129 if (project.getScm() != null) {
130 if (project.getScm().getDeveloperConnection() != null) {
131 descriptor.setScmSourceUrl(project.getScm().getDeveloperConnection());
132 } else if (project.getScm().getConnection() != null) {
133 descriptor.setScmSourceUrl(project.getScm().getConnection());
134 }
135 }
136
137 descriptor.setScmId(serverId);
138
139 for (MavenProject reactorProject : session.getProjects()) {
140 if (reactorProject.getOriginalModel() != null
141 && reactorProject.getOriginalModel().getScm() != null) {
142 String projectId =
143 ArtifactUtils.versionlessKey(reactorProject.getGroupId(), reactorProject.getArtifactId());
144
145 descriptor.addOriginalScmInfo(projectId, buildScm(reactorProject));
146 }
147 }
148
149 return descriptor;
150 }
151
152
153
154
155
156
157
158 protected Scm buildScm(MavenProject project) {
159 Scm scm;
160 if (project.getOriginalModel().getScm() == null) {
161 scm = null;
162 } else {
163 scm = new Scm();
164 scm.setConnection(project.getOriginalModel().getScm().getConnection());
165 scm.setDeveloperConnection(project.getOriginalModel().getScm().getDeveloperConnection());
166 scm.setTag(project.getOriginalModel().getScm().getTag());
167 scm.setUrl(project.getOriginalModel().getScm().getUrl());
168 }
169 return scm;
170 }
171 }