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.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.Component;
29 import org.apache.maven.plugins.annotations.Parameter;
30 import org.apache.maven.project.MavenProject;
31 import org.apache.maven.scm.manager.ScmManager;
32 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
33
34
35
36
37
38
39
40 public abstract class AbstractScmReleaseMojo
41 extends AbstractReleaseMojo
42 {
43
44
45
46 @Parameter( property = "username" )
47 private String username;
48
49
50
51
52 @Parameter( property = "password" )
53 private String password;
54
55
56
57
58 @Parameter( alias = "releaseLabel", property = "tag" )
59 private String tag;
60
61
62
63
64
65
66
67
68
69
70
71
72
73 @Parameter( defaultValue = "@{project.artifactId}-@{project.version}", property = "tagNameFormat" )
74 private String tagNameFormat;
75
76
77
78
79
80
81 @Parameter( property = "tagBase" )
82 private String tagBase;
83
84
85
86
87
88
89 @Parameter( defaultValue = "[maven-release-plugin] ", property = "scmCommentPrefix" )
90 private String scmCommentPrefix;
91
92
93
94
95
96
97 @Parameter( defaultValue = "true", property = "pushChanges" )
98 private boolean pushChanges = true;
99
100
101
102
103
104
105
106 @Parameter( property = "workItem" )
107 private String workItem;
108
109
110
111
112
113
114
115
116
117 @Parameter
118 private Map<String, String> providerImplementations;
119
120
121
122
123 @Component
124 private ScmManager scmManager;
125
126 @Override
127 public void execute()
128 throws MojoExecutionException, MojoFailureException
129 {
130 if ( providerImplementations != null )
131 {
132 for ( Map.Entry<String, String> providerEntry : providerImplementations.entrySet() )
133 {
134 getLog().info( "Change the default '" + providerEntry.getKey() + "' provider implementation to '"
135 + providerEntry.getValue() + "'." );
136 scmManager.setScmProviderImplementation( providerEntry.getKey(), providerEntry.getValue() );
137 }
138 }
139 }
140
141 @Override
142 protected ReleaseDescriptorBuilder createReleaseDescriptor()
143 {
144 ReleaseDescriptorBuilder descriptor = super.createReleaseDescriptor();
145
146 descriptor.setScmPassword( password );
147 descriptor.setScmReleaseLabel( tag );
148 descriptor.setScmTagNameFormat( tagNameFormat );
149 descriptor.setScmTagBase( tagBase );
150 descriptor.setScmUsername( username );
151 descriptor.setScmCommentPrefix( scmCommentPrefix );
152
153 descriptor.setPushChanges( pushChanges );
154 descriptor.setWorkItem( workItem );
155
156 if ( project.getScm() != null )
157 {
158 if ( project.getScm().getDeveloperConnection() != null )
159 {
160 descriptor.setScmSourceUrl( project.getScm().getDeveloperConnection() );
161 }
162 else if ( project.getScm().getConnection() != null )
163 {
164 descriptor.setScmSourceUrl( project.getScm().getConnection() );
165 }
166 }
167
168
169 descriptor.setScmId( project.getProperties().getProperty( "project.scm.id" ) );
170
171 for ( MavenProject reactorProject : session.getProjects() )
172 {
173 if ( reactorProject.getScm() != null )
174 {
175 String projectId =
176 ArtifactUtils.versionlessKey( reactorProject.getGroupId(), reactorProject.getArtifactId() );
177
178 descriptor.addOriginalScmInfo( projectId, buildScm( reactorProject ) );
179 }
180 }
181
182 return descriptor;
183 }
184
185
186
187
188
189
190
191 protected Scm buildScm( MavenProject project )
192 {
193 Scm scm;
194 if ( project.getOriginalModel().getScm() == null )
195 {
196 scm = null;
197 }
198 else
199 {
200 scm = new Scm();
201 scm.setConnection( project.getOriginalModel().getScm().getConnection() );
202 scm.setDeveloperConnection( project.getOriginalModel().getScm().getDeveloperConnection() );
203 scm.setTag( project.getOriginalModel().getScm().getTag() );
204 scm.setUrl( project.getOriginalModel().getScm().getUrl() );
205 }
206 return scm;
207 }
208 }