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 javax.inject.Inject;
22
23 import java.util.Arrays;
24
25 import org.apache.maven.plugin.MojoExecutionException;
26 import org.apache.maven.plugin.MojoFailureException;
27 import org.apache.maven.plugins.annotations.Mojo;
28 import org.apache.maven.plugins.annotations.Parameter;
29 import org.apache.maven.scm.manager.ScmManager;
30 import org.apache.maven.shared.release.DefaultReleaseManagerListener;
31 import org.apache.maven.shared.release.ReleaseBranchRequest;
32 import org.apache.maven.shared.release.ReleaseExecutionException;
33 import org.apache.maven.shared.release.ReleaseFailureException;
34 import org.apache.maven.shared.release.ReleaseManager;
35 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
36 import org.codehaus.plexus.configuration.PlexusConfiguration;
37
38
39
40
41
42
43
44
45
46 @Mojo(name = "branch", aggregator = true)
47 public class BranchReleaseMojo extends AbstractScmReadWriteReleaseMojo {
48
49
50
51
52
53 @Parameter(property = "branchName")
54 private String branchName;
55
56
57
58
59
60
61
62
63 @Parameter(property = "branchBase")
64 private String branchBase;
65
66
67
68
69
70
71 @Parameter(defaultValue = "false", property = "updateBranchVersions")
72 private boolean updateBranchVersions;
73
74
75
76
77
78
79 @Parameter(defaultValue = "true", property = "updateWorkingCopyVersions")
80 private boolean updateWorkingCopyVersions;
81
82
83
84
85
86
87
88
89
90
91
92
93
94 @Parameter(defaultValue = "false", property = "suppressCommitBeforeBranch")
95 private boolean suppressCommitBeforeBranch;
96
97
98
99
100
101
102 @Parameter(defaultValue = "true", property = "updateVersionsToSnapshot")
103 private boolean updateVersionsToSnapshot;
104
105
106
107
108
109
110 @Parameter(defaultValue = "false", property = "useEditMode")
111 private boolean useEditMode;
112
113
114
115
116
117
118 @Parameter(defaultValue = "true", property = "updateDependencies")
119 private boolean updateDependencies;
120
121
122
123
124
125
126
127 @Parameter(defaultValue = "false", property = "autoVersionSubmodules")
128 private boolean autoVersionSubmodules;
129
130
131
132
133
134
135
136
137
138 @Parameter(defaultValue = "false", property = "dryRun")
139 private boolean dryRun;
140
141
142
143
144
145
146 @Parameter(defaultValue = "true", property = "addSchema")
147 private boolean addSchema;
148
149
150
151
152
153
154
155 @Parameter(defaultValue = "true", property = "remoteTagging")
156 private boolean remoteTagging;
157
158
159
160
161
162
163
164
165
166 @Parameter
167 private String[] checkModificationExcludes;
168
169
170
171
172
173
174 @Parameter(property = "checkModificationExcludeList")
175 private String checkModificationExcludeList;
176
177
178
179
180
181
182
183 @Parameter(property = "releaseVersion")
184 private String releaseVersion;
185
186
187
188
189
190
191
192 @Parameter(property = "developmentVersion")
193 private String developmentVersion;
194
195
196
197
198
199
200
201
202 @Parameter(defaultValue = "default", property = "projectVersionPolicyId")
203 private String projectVersionPolicyId;
204
205
206
207
208
209
210 @Parameter(property = "projectVersionPolicyConfig")
211 private PlexusConfiguration projectVersionPolicyConfig;
212
213
214
215
216
217
218
219
220 @Parameter(property = "projectNamingPolicyId")
221 private String projectBranchNamingPolicyId;
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239 @Parameter(defaultValue = "@{prefix} prepare branch @{branchName}", property = "scmBranchCommitComment")
240 private String scmBranchCommitComment = "@{prefix} prepare branch @{branchName}";
241
242
243
244
245
246
247
248 @Parameter(defaultValue = "false", property = "pinExternals")
249 private boolean pinExternals;
250
251 @Inject
252 public BranchReleaseMojo(ReleaseManager releaseManager, ScmManager scmManager) {
253 super(releaseManager, scmManager);
254 }
255
256 @Override
257 public void execute() throws MojoExecutionException, MojoFailureException {
258 super.execute();
259
260 final ReleaseDescriptorBuilder config = createReleaseDescriptor();
261 config.setAddSchema(addSchema);
262 config.setScmUseEditMode(useEditMode);
263 config.setUpdateDependencies(updateDependencies);
264 config.setAutoVersionSubmodules(autoVersionSubmodules);
265 config.setScmReleaseLabel(branchName);
266 config.setScmBranchBase(branchBase);
267 config.setBranchCreation(true);
268 config.setUpdateBranchVersions(updateBranchVersions);
269 config.setUpdateWorkingCopyVersions(updateWorkingCopyVersions);
270 config.setUpdateVersionsToSnapshot(updateVersionsToSnapshot);
271 config.setRemoteTagging(remoteTagging);
272 config.setDefaultReleaseVersion(releaseVersion);
273 config.setDefaultDevelopmentVersion(developmentVersion);
274 config.setSuppressCommitBeforeTagOrBranch(suppressCommitBeforeBranch);
275 config.setProjectVersionPolicyId(projectVersionPolicyId);
276 if (projectVersionPolicyConfig != null) {
277 config.setProjectVersionPolicyConfig(projectVersionPolicyConfig.toString());
278 }
279 config.setProjectNamingPolicyId(projectBranchNamingPolicyId);
280 config.setScmBranchCommitComment(scmBranchCommitComment);
281 config.setPinExternals(pinExternals);
282
283 if (checkModificationExcludeList != null) {
284 checkModificationExcludes =
285 checkModificationExcludeList.replaceAll("\\s", "").split(",");
286 }
287
288 if (checkModificationExcludes != null) {
289 config.setCheckModificationExcludes(Arrays.asList(checkModificationExcludes));
290 }
291
292 try {
293 ReleaseBranchRequest branchRequest = new ReleaseBranchRequest();
294 branchRequest.setReleaseDescriptorBuilder(config);
295 branchRequest.setReleaseEnvironment(getReleaseEnvironment());
296 branchRequest.setReactorProjects(getReactorProjects());
297 branchRequest.setReleaseManagerListener(new DefaultReleaseManagerListener(getLog(), dryRun));
298 branchRequest.setDryRun(dryRun);
299 branchRequest.setUserProperties(session.getUserProperties());
300
301 releaseManager.branch(branchRequest);
302 } catch (ReleaseExecutionException e) {
303 throw new MojoExecutionException(e.getMessage(), e);
304 } catch (ReleaseFailureException e) {
305 throw new MojoFailureException(e.getMessage(), e);
306 }
307 }
308 }