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 private String tagBase;
79
80
81
82
83
84
85 protected File basedir;
86
87
88
89
90
91
92 protected Settings settings;
93
94
95
96
97
98
99 protected MavenProject project;
100
101
102
103
104 protected ReleaseManager releaseManager;
105
106
107
108
109
110
111 private String arguments;
112
113
114
115
116
117
118 private String pomFileName;
119
120
121
122
123
124
125
126 private String scmCommentPrefix;
127
128
129
130
131
132
133 protected List reactorProjects;
134
135
136
137
138
139
140
141 private Map providerImplementations;
142
143
144
145
146
147
148
149 protected File mavenHome;
150
151
152
153
154
155
156
157 protected File javaHome;
158
159
160
161
162
163
164
165 protected File localRepoDirectory;
166
167
168
169
170
171
172
173 protected String mavenExecutorId;
174
175
176
177
178
179
180
181
182
183
184
185 private boolean localCheckout;
186
187
188
189
190
191
192
193 private boolean pushChanges = true;
194
195
196
197
198
199
200 private ScmManager scmManager;
201
202
203
204
205
206
207
208 protected MavenSession session;
209
210
211
212
213
214
215
216 protected ReleaseEnvironment getReleaseEnvironment()
217 {
218 return new DefaultReleaseEnvironment().setSettings( settings )
219 .setJavaHome( javaHome )
220 .setMavenHome( mavenHome )
221 .setLocalRepositoryDirectory( localRepoDirectory )
222 .setMavenExecutorId( mavenExecutorId );
223 }
224
225
226
227
228 public void execute()
229 throws MojoExecutionException, MojoFailureException
230 {
231 if ( providerImplementations != null )
232 {
233 for ( Iterator i = providerImplementations.keySet().iterator(); i.hasNext(); )
234 {
235 String providerType = (String) i.next();
236 String providerImplementation = (String) providerImplementations.get( providerType );
237 getLog().info( "Change the default '" + providerType + "' provider implementation to '"
238 + providerImplementation + "'." );
239 scmManager.setScmProviderImplementation( providerType, providerImplementation );
240 }
241 }
242 }
243
244
245
246
247
248
249 protected ReleaseDescriptor createReleaseDescriptor()
250 {
251 ReleaseDescriptor descriptor = new ReleaseDescriptor();
252
253 descriptor.setInteractive( settings.isInteractiveMode() );
254
255 descriptor.setScmPassword( password );
256 descriptor.setScmReleaseLabel( tag );
257 descriptor.setScmTagBase( tagBase );
258 descriptor.setScmUsername( username );
259 descriptor.setScmCommentPrefix( scmCommentPrefix );
260
261 descriptor.setWorkingDirectory( basedir.getAbsolutePath() );
262
263 descriptor.setPomFileName( pomFileName );
264
265 descriptor.setLocalCheckout( localCheckout );
266
267 descriptor.setPushChanges( pushChanges );
268
269 List profiles = project.getActiveProfiles();
270
271 String arguments = this.arguments;
272 if ( profiles != null && !profiles.isEmpty() )
273 {
274 if ( !StringUtils.isEmpty( arguments ) )
275 {
276 arguments += " -P ";
277 }
278 else
279 {
280 arguments = "-P ";
281 }
282
283 for ( Iterator it = profiles.iterator(); it.hasNext(); )
284 {
285 Profile profile = (Profile) it.next();
286
287 arguments += profile.getId();
288 if ( it.hasNext() )
289 {
290 arguments += ",";
291 }
292 }
293
294 String additionalProfiles = getAdditionalProfiles();
295 if ( additionalProfiles != null )
296 {
297 if ( !profiles.isEmpty() )
298 {
299 arguments += ",";
300 }
301 arguments += additionalProfiles;
302 }
303 }
304 descriptor.setAdditionalArguments( arguments );
305
306 return descriptor;
307 }
308
309
310
311
312
313
314 protected String getAdditionalProfiles()
315 {
316 return null;
317 }
318
319
320
321
322
323
324 void setReleaseManager( ReleaseManager releaseManager )
325 {
326 this.releaseManager = releaseManager;
327 }
328
329
330
331
332
333
334 Settings getSettings()
335 {
336 return settings;
337 }
338
339
340
341
342
343
344 public void setBasedir( File basedir )
345 {
346 this.basedir = basedir;
347 }
348
349
350
351
352
353
354 public List getReactorProjects()
355 {
356 return reactorProjects;
357 }
358
359
360
361
362
363
364 protected void addArgument( String argument )
365 {
366 if ( arguments != null )
367 {
368 arguments += " " + argument;
369 }
370 else
371 {
372 arguments = argument;
373 }
374 }
375
376
377
378
379
380
381
382
383
384 protected void mergeCommandLineConfig( ReleaseDescriptor config, ReleaseDescriptor sysPropertiesConfig )
385 {
386
387 if ( sysPropertiesConfig.getReleaseVersions() != null )
388 {
389 config.getReleaseVersions().putAll( sysPropertiesConfig.getReleaseVersions() );
390 }
391 if ( sysPropertiesConfig.getDevelopmentVersions() != null )
392 {
393 config.getDevelopmentVersions().putAll( sysPropertiesConfig.getDevelopmentVersions() );
394 }
395 }
396 }