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 @Parameter( defaultValue = "true", property = "scmShallowClone" )
96 private boolean scmShallowClone = true;
97
98
99
100
101
102
103 @Parameter( defaultValue = "true", property = "pushChanges" )
104 private boolean pushChanges = true;
105
106
107
108
109
110
111
112 @Parameter( property = "workItem" )
113 private String workItem;
114
115
116
117
118
119
120
121
122
123 @Parameter
124 private Map<String, String> providerImplementations;
125
126
127
128
129 @Component
130 private ScmManager scmManager;
131
132 @Override
133 public void execute()
134 throws MojoExecutionException, MojoFailureException
135 {
136 if ( providerImplementations != null )
137 {
138 for ( Map.Entry<String, String> providerEntry : providerImplementations.entrySet() )
139 {
140 getLog().info( "Change the default '" + providerEntry.getKey() + "' provider implementation to '"
141 + providerEntry.getValue() + "'." );
142 scmManager.setScmProviderImplementation( providerEntry.getKey(), providerEntry.getValue() );
143 }
144 }
145 }
146
147 @Override
148 protected ReleaseDescriptorBuilder createReleaseDescriptor()
149 {
150 ReleaseDescriptorBuilder descriptor = super.createReleaseDescriptor();
151
152 descriptor.setScmPassword( password );
153 descriptor.setScmReleaseLabel( tag );
154 descriptor.setScmTagNameFormat( tagNameFormat );
155 descriptor.setScmTagBase( tagBase );
156 descriptor.setScmUsername( username );
157 descriptor.setScmCommentPrefix( scmCommentPrefix );
158 descriptor.setScmShallowClone( scmShallowClone );
159
160 descriptor.setPushChanges( pushChanges );
161 descriptor.setWorkItem( workItem );
162
163 if ( project.getScm() != null )
164 {
165 if ( project.getScm().getDeveloperConnection() != null )
166 {
167 descriptor.setScmSourceUrl( project.getScm().getDeveloperConnection() );
168 }
169 else if ( project.getScm().getConnection() != null )
170 {
171 descriptor.setScmSourceUrl( project.getScm().getConnection() );
172 }
173 }
174
175
176 descriptor.setScmId( project.getProperties().getProperty( "project.scm.id" ) );
177
178 for ( MavenProject reactorProject : session.getProjects() )
179 {
180 if ( reactorProject.getScm() != null )
181 {
182 String projectId =
183 ArtifactUtils.versionlessKey( reactorProject.getGroupId(), reactorProject.getArtifactId() );
184
185 descriptor.addOriginalScmInfo( projectId, buildScm( reactorProject ) );
186 }
187 }
188
189 return descriptor;
190 }
191
192
193
194
195
196
197
198 protected Scm buildScm( MavenProject project )
199 {
200 Scm scm;
201 if ( project.getOriginalModel().getScm() == null )
202 {
203 scm = null;
204 }
205 else
206 {
207 scm = new Scm();
208 scm.setConnection( project.getOriginalModel().getScm().getConnection() );
209 scm.setDeveloperConnection( project.getOriginalModel().getScm().getDeveloperConnection() );
210 scm.setTag( project.getOriginalModel().getScm().getTag() );
211 scm.setUrl( project.getOriginalModel().getScm().getUrl() );
212 }
213 return scm;
214 }
215 }