1 package org.apache.maven.plugins.release;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Iterator;
24 import java.util.List;
25 import java.util.Map;
26
27 import org.apache.maven.execution.MavenSession;
28 import org.apache.maven.model.Profile;
29 import org.apache.maven.plugin.AbstractMojo;
30 import org.apache.maven.plugin.MojoExecutionException;
31 import org.apache.maven.plugin.MojoFailureException;
32 import org.apache.maven.project.MavenProject;
33 import org.apache.maven.scm.manager.ScmManager;
34 import org.apache.maven.settings.Settings;
35 import org.apache.maven.shared.release.ReleaseManager;
36 import org.apache.maven.shared.release.config.ReleaseDescriptor;
37 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
38 import org.apache.maven.shared.release.env.ReleaseEnvironment;
39 import org.codehaus.plexus.util.StringUtils;
40
41
42
43
44
45
46
47 public abstract class AbstractReleaseMojo
48 extends AbstractMojo
49 {
50
51
52
53
54
55 private String username;
56
57
58
59
60
61
62 private String password;
63
64
65
66
67
68
69 private String tag;
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 private String tagNameFormat;
85
86
87
88
89
90
91
92
93 private String tagBase;
94
95
96
97
98
99
100 protected File basedir;
101
102
103
104
105
106
107 protected Settings settings;
108
109
110
111
112
113
114 protected MavenProject project;
115
116
117
118
119 protected ReleaseManager releaseManager;
120
121
122
123
124
125
126 private String arguments;
127
128
129
130
131
132
133 private String pomFileName;
134
135
136
137
138
139
140
141 private String scmCommentPrefix;
142
143
144
145
146
147
148 protected List reactorProjects;
149
150
151
152
153
154
155
156 private Map providerImplementations;
157
158
159
160
161
162
163
164 protected File mavenHome;
165
166
167
168
169
170
171
172 protected File javaHome;
173
174
175
176
177
178
179
180 protected File localRepoDirectory;
181
182
183
184
185
186
187
188 protected String mavenExecutorId;
189
190
191
192
193
194
195
196
197
198
199
200 private boolean localCheckout;
201
202
203
204
205
206
207
208 private boolean pushChanges = true;
209
210
211
212
213
214
215 private ScmManager scmManager;
216
217
218
219
220
221
222
223 protected MavenSession session;
224
225
226
227
228
229
230
231 protected ReleaseEnvironment getReleaseEnvironment()
232 {
233 return new DefaultReleaseEnvironment().setSettings( settings )
234 .setJavaHome( javaHome )
235 .setMavenHome( mavenHome )
236 .setLocalRepositoryDirectory( localRepoDirectory )
237 .setMavenExecutorId( mavenExecutorId );
238 }
239
240
241
242
243 public void execute()
244 throws MojoExecutionException, MojoFailureException
245 {
246 if ( providerImplementations != null )
247 {
248 for ( Iterator i = providerImplementations.keySet().iterator(); i.hasNext(); )
249 {
250 String providerType = (String) i.next();
251 String providerImplementation = (String) providerImplementations.get( providerType );
252 getLog().info( "Change the default '" + providerType + "' provider implementation to '"
253 + providerImplementation + "'." );
254 scmManager.setScmProviderImplementation( providerType, providerImplementation );
255 }
256 }
257 }
258
259
260
261
262
263
264 protected ReleaseDescriptor createReleaseDescriptor()
265 {
266 ReleaseDescriptor descriptor = new ReleaseDescriptor();
267
268 descriptor.setInteractive( settings.isInteractiveMode() );
269
270 descriptor.setScmPassword( password );
271 descriptor.setScmReleaseLabel( tag );
272 descriptor.setScmTagNameFormat( tagNameFormat );
273 descriptor.setScmTagBase( tagBase );
274 descriptor.setScmUsername( username );
275 descriptor.setScmCommentPrefix( scmCommentPrefix );
276
277 descriptor.setWorkingDirectory( basedir.getAbsolutePath() );
278
279 descriptor.setPomFileName( pomFileName );
280
281 descriptor.setLocalCheckout( localCheckout );
282
283 descriptor.setPushChanges( pushChanges );
284
285 List profiles = project.getActiveProfiles();
286
287 String arguments = this.arguments;
288 if ( profiles != null && !profiles.isEmpty() )
289 {
290 if ( !StringUtils.isEmpty( arguments ) )
291 {
292 arguments += " -P ";
293 }
294 else
295 {
296 arguments = "-P ";
297 }
298
299 for ( Iterator it = profiles.iterator(); it.hasNext(); )
300 {
301 Profile profile = (Profile) it.next();
302
303 arguments += profile.getId();
304 if ( it.hasNext() )
305 {
306 arguments += ",";
307 }
308 }
309
310 String additionalProfiles = getAdditionalProfiles();
311 if ( additionalProfiles != null )
312 {
313 if ( !profiles.isEmpty() )
314 {
315 arguments += ",";
316 }
317 arguments += additionalProfiles;
318 }
319 }
320 descriptor.setAdditionalArguments( arguments );
321
322 return descriptor;
323 }
324
325
326
327
328
329
330 protected String getAdditionalProfiles()
331 {
332 return null;
333 }
334
335
336
337
338
339
340 void setReleaseManager( ReleaseManager releaseManager )
341 {
342 this.releaseManager = releaseManager;
343 }
344
345
346
347
348
349
350 Settings getSettings()
351 {
352 return settings;
353 }
354
355
356
357
358
359
360 public void setBasedir( File basedir )
361 {
362 this.basedir = basedir;
363 }
364
365
366
367
368
369
370 public List getReactorProjects()
371 {
372 return reactorProjects;
373 }
374
375
376
377
378
379
380 protected void addArgument( String argument )
381 {
382 if ( arguments != null )
383 {
384 arguments += " " + argument;
385 }
386 else
387 {
388 arguments = argument;
389 }
390 }
391
392
393
394
395
396
397
398
399
400 protected void mergeCommandLineConfig( ReleaseDescriptor config, ReleaseDescriptor sysPropertiesConfig )
401 {
402
403 if ( sysPropertiesConfig.getReleaseVersions() != null )
404 {
405 config.getReleaseVersions().putAll( sysPropertiesConfig.getReleaseVersions() );
406 }
407 if ( sysPropertiesConfig.getDevelopmentVersions() != null )
408 {
409 config.getDevelopmentVersions().putAll( sysPropertiesConfig.getDevelopmentVersions() );
410 }
411 }
412 }