]> source.dussan.org Git - sonarqube.git/blob
1ccbd835643d113ab577edc8c8fc29cffbfe1dfb
[sonarqube.git] /
1 /*
2  * Sonar, open source software quality management tool.
3  * Copyright (C) 2009 SonarSource SA
4  * mailto:contact AT sonarsource DOT com
5  *
6  * Sonar is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 3 of the License, or (at your option) any later version.
10  *
11  * Sonar is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with Sonar; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
19  */
20 package org.sonar.updatecenter.mavenplugin;
21
22 import org.apache.maven.artifact.Artifact;
23 import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
24 import org.apache.maven.plugin.AbstractMojo;
25 import org.apache.maven.project.MavenProject;
26 import org.apache.maven.project.MavenProjectHelper;
27
28 import java.io.File;
29 import java.util.HashSet;
30 import java.util.List;
31 import java.util.Set;
32
33 /**
34  * Base class for Sonar-plugin-packaging related tasks.
35  * 
36  * @author Evgeny Mandrikov
37  */
38 public abstract class AbstractSonarPluginMojo extends AbstractMojo {
39
40   public static final String SONAR_GROUPID = "org.codehaus.sonar";
41   public static final String SONAR_PLUGIN_API_ARTIFACTID = "sonar-plugin-api";
42   public static final String SONAR_PLUGIN_API_TYPE = "jar";
43
44   /**
45    * The Maven project.
46    * 
47    * @parameter expression="${project}"
48    * @required
49    * @readonly
50    */
51   private MavenProject project;
52
53   /**
54    * Directory containing the generated JAR.
55    * 
56    * @parameter expression="${project.build.directory}"
57    * @required
58    */
59   private File outputDirectory;
60
61   /**
62    * Directory containing the classes and resource files that should be packaged into the JAR.
63    * 
64    * @parameter expression="${project.build.outputDirectory}"
65    * @required
66    */
67   private File classesDirectory;
68
69   /**
70    * The directory where the app is built.
71    * 
72    * @parameter expression="${project.build.directory}/${project.build.finalName}"
73    * @required
74    */
75   private File appDirectory;
76
77   /**
78    * Name of the generated JAR.
79    * 
80    * @parameter alias="jarName" expression="${jar.finalName}" default-value="${project.build.finalName}"
81    * @required
82    */
83   private String finalName;
84
85   /**
86    * Classifier to add to the artifact generated. If given, the artifact will be an attachment instead.
87    * 
88    * @parameter
89    */
90   private String classifier;
91
92   /**
93    * @component
94    */
95   protected MavenProjectHelper projectHelper;
96
97   /**
98    * Plugin key.
99    * 
100    * @parameter expression="${sonar.pluginKey}"
101    */
102   protected String pluginKey;
103
104   /**
105    * @parameter expression="${sonar.pluginTermsConditionsUrl}"
106    */
107   private String pluginTermsConditionsUrl;
108
109   /**
110    * Name of plugin class.
111    * 
112    * @parameter expression="${sonar.pluginClass}"
113    * @required
114    */
115   private String pluginClass;
116
117   /**
118    * @parameter expression="${sonar.pluginName}" default-value="${project.name}"
119    */
120   private String pluginName;
121
122   /**
123    * @parameter default-value="${project.description}"
124    */
125   private String pluginDescription;
126
127   /**
128    * @parameter default-value="${project.url}"
129    */
130   private String pluginUrl;
131
132   /**
133    * @parameter default-value="${project.issueManagement.url}"
134    */
135   private String pluginIssueTrackerUrl;
136
137   /**
138    * @parameter
139    * @since 0.3
140    */
141   private boolean useChildFirstClassLoader = false;
142
143   /**
144    * @parameter
145    */
146   private String extendPlugin;
147
148   /**
149    * @parameter expression="${sonar.skipDependenciesPackaging}"
150    */
151   private boolean skipDependenciesPackaging = false;
152
153   protected final MavenProject getProject() {
154     return project;
155   }
156
157   protected final File getOutputDirectory() {
158     return outputDirectory;
159   }
160
161   /**
162    * @return the main classes directory, so it's used as the root of the jar.
163    */
164   protected final File getClassesDirectory() {
165     return classesDirectory;
166   }
167
168   public File getAppDirectory() {
169     return appDirectory;
170   }
171
172   protected final String getFinalName() {
173     return finalName;
174   }
175
176   protected final String getClassifier() {
177     return classifier;
178   }
179
180   public String getExplicitPluginKey() {
181     return pluginKey;
182   }
183
184   protected final String getPluginClass() {
185     return pluginClass;
186   }
187
188   protected final String getPluginName() {
189     return pluginName;
190   }
191
192   protected final String getPluginDescription() {
193     return pluginDescription;
194   }
195
196   protected final String getPluginUrl() {
197     return pluginUrl;
198   }
199
200   protected String getPluginTermsConditionsUrl() {
201     return pluginTermsConditionsUrl;
202   }
203
204   protected String getPluginIssueTrackerUrl() {
205     return pluginIssueTrackerUrl;
206   }
207
208   public boolean isUseChildFirstClassLoader() {
209     return useChildFirstClassLoader;
210   }
211
212   public String getExtendPlugin() {
213     return extendPlugin;
214   }
215
216   protected boolean isSkipDependenciesPackaging() {
217     return skipDependenciesPackaging;
218   }
219
220   @SuppressWarnings({ "unchecked" })
221   protected Set<Artifact> getDependencyArtifacts() {
222     return getProject().getDependencyArtifacts();
223   }
224
225   protected Set<Artifact> getDependencyArtifacts(String scope) {
226     Set<Artifact> result = new HashSet<Artifact>();
227     for (Artifact dep : getDependencyArtifacts()) {
228       if (scope.equals(dep.getScope())) {
229         result.add(dep);
230       }
231     }
232     return result;
233   }
234
235   @SuppressWarnings({ "unchecked" })
236   protected Set<Artifact> getIncludedArtifacts() {
237     Set<Artifact> result = new HashSet<Artifact>();
238     Set<Artifact> artifacts = getProject().getArtifacts();
239     ScopeArtifactFilter filter = new ScopeArtifactFilter(Artifact.SCOPE_RUNTIME);
240     for (Artifact artifact : artifacts) {
241       if (filter.include(artifact)) {
242         result.add(artifact);
243       }
244     }
245     return result;
246   }
247
248   protected final Artifact getSonarPluginApiArtifact() {
249     Set<Artifact> dependencies = getDependencyArtifacts();
250     if (dependencies != null) {
251       for (Artifact dep : dependencies) {
252         if (SONAR_GROUPID.equals(dep.getGroupId()) && SONAR_PLUGIN_API_ARTIFACTID.equals(dep.getArtifactId())
253             && SONAR_PLUGIN_API_TYPE.equals(dep.getType())) {
254           return dep;
255         }
256       }
257     }
258     return null;
259   }
260
261   protected String getMessage(String title, List<String> ids) {
262     StringBuilder message = new StringBuilder();
263     message.append(title);
264     message.append("\n\n");
265     for (String id : ids) {
266       message.append("\t").append(id).append("\n");
267     }
268     return message.toString();
269   }
270 }