1 | |
package org.apache.maven.plugin.ear; |
2 | |
|
3 | |
import java.util.ArrayList; |
4 | |
import java.util.Iterator; |
5 | |
import java.util.List; |
6 | |
|
7 | |
import org.apache.maven.plugin.AbstractMojo; |
8 | |
import org.apache.maven.plugin.MojoExecutionException; |
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | 0 | public class HelpMojo |
19 | |
extends AbstractMojo |
20 | |
{ |
21 | |
|
22 | |
|
23 | |
|
24 | |
|
25 | |
|
26 | |
private boolean detail; |
27 | |
|
28 | |
|
29 | |
|
30 | |
|
31 | |
|
32 | |
|
33 | |
private java.lang.String goal; |
34 | |
|
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
|
40 | |
private int lineLength; |
41 | |
|
42 | |
|
43 | |
|
44 | |
|
45 | |
|
46 | |
|
47 | |
private int indentSize; |
48 | |
|
49 | |
|
50 | |
|
51 | |
public void execute() |
52 | |
throws MojoExecutionException |
53 | |
{ |
54 | 0 | if ( lineLength <= 0 ) |
55 | |
{ |
56 | 0 | getLog().warn( "The parameter 'lineLength' should be positive, using '80' as default." ); |
57 | 0 | lineLength = 80; |
58 | |
} |
59 | 0 | if ( indentSize <= 0 ) |
60 | |
{ |
61 | 0 | getLog().warn( "The parameter 'indentSize' should be positive, using '2' as default." ); |
62 | 0 | indentSize = 2; |
63 | |
} |
64 | |
|
65 | 0 | StringBuffer sb = new StringBuffer(); |
66 | |
|
67 | 0 | append( sb, "org.apache.maven.plugins:maven-ear-plugin:2.4.1", 0 ); |
68 | 0 | append( sb, "", 0 ); |
69 | |
|
70 | 0 | append( sb, "Maven EAR Plugin", 0 ); |
71 | 0 | append( sb, "Generates a J2EE Enterprise Archive (EAR) file.", 1 ); |
72 | 0 | append( sb, "", 0 ); |
73 | |
|
74 | 0 | if ( goal == null || goal.length() <= 0 ) |
75 | |
{ |
76 | 0 | append( sb, "This plugin has 3 goals:", 0 ); |
77 | 0 | append( sb, "", 0 ); |
78 | |
} |
79 | |
|
80 | 0 | if ( goal == null || goal.length() <= 0 || "ear".equals( goal ) ) |
81 | |
{ |
82 | 0 | append( sb, "ear:ear", 0 ); |
83 | 0 | append( sb, "Builds J2EE Enteprise Archive (EAR) files.", 1 ); |
84 | 0 | append( sb, "", 0 ); |
85 | 0 | if ( detail ) |
86 | |
{ |
87 | 0 | append( sb, "Available parameters:", 1 ); |
88 | 0 | append( sb, "", 0 ); |
89 | |
|
90 | 0 | append( sb, "applicationXml", 2 ); |
91 | 0 | append( sb, "The location of a custom application.xml file to be used within the ear file.", 3 ); |
92 | 0 | append( sb, "", 0 ); |
93 | |
|
94 | 0 | append( sb, "archive", 2 ); |
95 | 0 | append( sb, "The archive configuration to use. See Maven Archiver Reference.", 3 ); |
96 | 0 | append( sb, "", 0 ); |
97 | |
|
98 | 0 | append( sb, "artifactTypeMappings", 2 ); |
99 | 0 | append( sb, "The artifact type mappings.", 3 ); |
100 | 0 | append( sb, "", 0 ); |
101 | |
|
102 | 0 | append( sb, "classifier", 2 ); |
103 | 0 | append( sb, "Classifier to add to the artifact generated. If given, the artifact will be an attachment instead.", 3 ); |
104 | 0 | append( sb, "", 0 ); |
105 | |
|
106 | 0 | append( sb, "defaultLibBundleDir", 2 ); |
107 | 0 | append( sb, "The default bundle dir for libraries.", 3 ); |
108 | 0 | append( sb, "", 0 ); |
109 | |
|
110 | 0 | append( sb, "earSourceDirectory", 2 ); |
111 | 0 | append( sb, "Single directory for extra files to include in the EAR.", 3 ); |
112 | 0 | append( sb, "", 0 ); |
113 | |
|
114 | 0 | append( sb, "earSourceExcludes", 2 ); |
115 | 0 | append( sb, "The comma separated list of tokens to exclude from the EAR.", 3 ); |
116 | 0 | append( sb, "", 0 ); |
117 | |
|
118 | 0 | append( sb, "earSourceIncludes (Default: **)", 2 ); |
119 | 0 | append( sb, "The comma separated list of tokens to include in the EAR.", 3 ); |
120 | 0 | append( sb, "", 0 ); |
121 | |
|
122 | 0 | append( sb, "encoding (Default: UTF-8)", 2 ); |
123 | 0 | append( sb, "Character encoding for the auto-generated deployment file(s).", 3 ); |
124 | 0 | append( sb, "", 0 ); |
125 | |
|
126 | 0 | append( sb, "escapedBackslashesInFilePath (Default: false)", 2 ); |
127 | 0 | append( sb, "To escape interpolated value with windows path c:\\foo\\bar will be replaced with c:\\\\foo\\\\bar", 3 ); |
128 | 0 | append( sb, "", 0 ); |
129 | |
|
130 | 0 | append( sb, "escapeString", 2 ); |
131 | 0 | append( sb, "Expression preceded with the String won\'t be interpolated \\${foo} will be replaced with ${foo}", 3 ); |
132 | 0 | append( sb, "", 0 ); |
133 | |
|
134 | 0 | append( sb, "fileNameMapping", 2 ); |
135 | 0 | append( sb, "The file name mapping to use for all dependencies included in the EAR file.", 3 ); |
136 | 0 | append( sb, "", 0 ); |
137 | |
|
138 | 0 | append( sb, "filtering (Default: false)", 2 ); |
139 | 0 | append( sb, "Specify that the ear sources should be filtered.", 3 ); |
140 | 0 | append( sb, "", 0 ); |
141 | |
|
142 | 0 | append( sb, "filters", 2 ); |
143 | 0 | append( sb, "Filters (property files) to include during the interpolation of the pom.xml.", 3 ); |
144 | 0 | append( sb, "", 0 ); |
145 | |
|
146 | 0 | append( sb, "finalName", 2 ); |
147 | 0 | append( sb, "The name of the EAR file to generate.", 3 ); |
148 | 0 | append( sb, "", 0 ); |
149 | |
|
150 | 0 | append( sb, "generatedDescriptorLocation", 2 ); |
151 | 0 | append( sb, "Directory where the deployment descriptor file(s) will be auto-generated.", 3 ); |
152 | 0 | append( sb, "", 0 ); |
153 | |
|
154 | 0 | append( sb, "includeLibInApplicationXml (Default: false)", 2 ); |
155 | 0 | append( sb, "Should libraries be added in application.xml", 3 ); |
156 | 0 | append( sb, "", 0 ); |
157 | |
|
158 | 0 | append( sb, "jboss", 2 ); |
159 | 0 | append( sb, "The JBoss specific configuration.", 3 ); |
160 | 0 | append( sb, "", 0 ); |
161 | |
|
162 | 0 | append( sb, "mainArtifactId", 2 ); |
163 | 0 | append( sb, "The id to use to define the main artifact (e.g. the artifact without a classifier) when there is multiple candidates.", 3 ); |
164 | 0 | append( sb, "", 0 ); |
165 | |
|
166 | 0 | append( sb, "manifestFile", 2 ); |
167 | 0 | append( sb, "The location of the manifest file to be used within the ear file. If not value if specified, the default location in the workDirectory is taken. If the file does not exist, a manifest will be generated automatically.", 3 ); |
168 | 0 | append( sb, "", 0 ); |
169 | |
|
170 | 0 | append( sb, "modules", 2 ); |
171 | 0 | append( sb, "The ear modules configuration.", 3 ); |
172 | 0 | append( sb, "", 0 ); |
173 | |
|
174 | 0 | append( sb, "nonFilteredFileExtensions", 2 ); |
175 | 0 | append( sb, "A list of file extensions that should not be filtered if filtering is actived.", 3 ); |
176 | 0 | append( sb, "", 0 ); |
177 | |
|
178 | 0 | append( sb, "outputDirectory", 2 ); |
179 | 0 | append( sb, "The directory for the generated EAR.", 3 ); |
180 | 0 | append( sb, "", 0 ); |
181 | |
|
182 | 0 | append( sb, "resourcesDir", 2 ); |
183 | 0 | append( sb, "Deprecated. please use earSourcesDirectory instead", 3 ); |
184 | 0 | append( sb, "", 0 ); |
185 | 0 | append( sb, "The directory to get the resources from.", 3 ); |
186 | 0 | append( sb, "", 0 ); |
187 | |
|
188 | 0 | append( sb, "unpackTypes", 2 ); |
189 | 0 | append( sb, "The comma separated list of artifact\'s type(s) to unpack by default.", 3 ); |
190 | 0 | append( sb, "", 0 ); |
191 | |
|
192 | 0 | append( sb, "version (Default: 1.3)", 2 ); |
193 | 0 | append( sb, "The version of the application.xml to generate. Valid values are 1.3, 1.4, 5 and 6.", 3 ); |
194 | 0 | append( sb, "", 0 ); |
195 | |
|
196 | 0 | append( sb, "workDirectory", 2 ); |
197 | 0 | append( sb, "Directory that resources are copied to during the build.", 3 ); |
198 | 0 | append( sb, "", 0 ); |
199 | |
} |
200 | |
} |
201 | |
|
202 | 0 | if ( goal == null || goal.length() <= 0 || "generate-application-xml".equals( goal ) ) |
203 | |
{ |
204 | 0 | append( sb, "ear:generate-application-xml", 0 ); |
205 | 0 | append( sb, "A Mojo that generates the EAR deployment descriptor file(s).", 1 ); |
206 | 0 | append( sb, "", 0 ); |
207 | 0 | if ( detail ) |
208 | |
{ |
209 | 0 | append( sb, "Available parameters:", 1 ); |
210 | 0 | append( sb, "", 0 ); |
211 | |
|
212 | 0 | append( sb, "artifactTypeMappings", 2 ); |
213 | 0 | append( sb, "The artifact type mappings.", 3 ); |
214 | 0 | append( sb, "", 0 ); |
215 | |
|
216 | 0 | append( sb, "defaultLibBundleDir", 2 ); |
217 | 0 | append( sb, "The default bundle dir for libraries.", 3 ); |
218 | 0 | append( sb, "", 0 ); |
219 | |
|
220 | 0 | append( sb, "description", 2 ); |
221 | 0 | append( sb, "Description of the application to be used when application.xml file is autogenerated.", 3 ); |
222 | 0 | append( sb, "", 0 ); |
223 | |
|
224 | 0 | append( sb, "displayName", 2 ); |
225 | 0 | append( sb, "Display name of the application to be used when application.xml file is autogenerated.", 3 ); |
226 | 0 | append( sb, "", 0 ); |
227 | |
|
228 | 0 | append( sb, "encoding (Default: UTF-8)", 2 ); |
229 | 0 | append( sb, "Character encoding for the auto-generated deployment file(s).", 3 ); |
230 | 0 | append( sb, "", 0 ); |
231 | |
|
232 | 0 | append( sb, "fileNameMapping", 2 ); |
233 | 0 | append( sb, "The file name mapping to use for all dependencies included in the EAR file.", 3 ); |
234 | 0 | append( sb, "", 0 ); |
235 | |
|
236 | 0 | append( sb, "generateApplicationXml", 2 ); |
237 | 0 | append( sb, "Whether the application.xml should be generated or not.", 3 ); |
238 | 0 | append( sb, "", 0 ); |
239 | |
|
240 | 0 | append( sb, "generatedDescriptorLocation", 2 ); |
241 | 0 | append( sb, "Directory where the deployment descriptor file(s) will be auto-generated.", 3 ); |
242 | 0 | append( sb, "", 0 ); |
243 | |
|
244 | 0 | append( sb, "includeLibInApplicationXml (Default: false)", 2 ); |
245 | 0 | append( sb, "Should libraries be added in application.xml", 3 ); |
246 | 0 | append( sb, "", 0 ); |
247 | |
|
248 | 0 | append( sb, "jboss", 2 ); |
249 | 0 | append( sb, "The JBoss specific configuration.", 3 ); |
250 | 0 | append( sb, "", 0 ); |
251 | |
|
252 | 0 | append( sb, "mainArtifactId", 2 ); |
253 | 0 | append( sb, "The id to use to define the main artifact (e.g. the artifact without a classifier) when there is multiple candidates.", 3 ); |
254 | 0 | append( sb, "", 0 ); |
255 | |
|
256 | 0 | append( sb, "modules", 2 ); |
257 | 0 | append( sb, "The ear modules configuration.", 3 ); |
258 | 0 | append( sb, "", 0 ); |
259 | |
|
260 | 0 | append( sb, "security", 2 ); |
261 | 0 | append( sb, "The security-roles to be added to the auto-generated application.xml file.", 3 ); |
262 | 0 | append( sb, "", 0 ); |
263 | |
|
264 | 0 | append( sb, "version (Default: 1.3)", 2 ); |
265 | 0 | append( sb, "The version of the application.xml to generate. Valid values are 1.3, 1.4, 5 and 6.", 3 ); |
266 | 0 | append( sb, "", 0 ); |
267 | |
|
268 | 0 | append( sb, "workDirectory", 2 ); |
269 | 0 | append( sb, "Directory that resources are copied to during the build.", 3 ); |
270 | 0 | append( sb, "", 0 ); |
271 | |
} |
272 | |
} |
273 | |
|
274 | 0 | if ( goal == null || goal.length() <= 0 || "help".equals( goal ) ) |
275 | |
{ |
276 | 0 | append( sb, "ear:help", 0 ); |
277 | 0 | append( sb, "Display help information on maven-ear-plugin.\nCall\n\u00a0\u00a0mvn\u00a0ear:help\u00a0-Ddetail=true\u00a0-Dgoal=<goal-name>\nto display parameter details.", 1 ); |
278 | 0 | append( sb, "", 0 ); |
279 | 0 | if ( detail ) |
280 | |
{ |
281 | 0 | append( sb, "Available parameters:", 1 ); |
282 | 0 | append( sb, "", 0 ); |
283 | |
|
284 | 0 | append( sb, "detail (Default: false)", 2 ); |
285 | 0 | append( sb, "If true, display all settable properties for each goal.", 3 ); |
286 | 0 | append( sb, "", 0 ); |
287 | |
|
288 | 0 | append( sb, "goal", 2 ); |
289 | 0 | append( sb, "The name of the goal for which to show help. If unspecified, all goals will be displayed.", 3 ); |
290 | 0 | append( sb, "", 0 ); |
291 | |
|
292 | 0 | append( sb, "indentSize (Default: 2)", 2 ); |
293 | 0 | append( sb, "The number of spaces per indentation level, should be positive.", 3 ); |
294 | 0 | append( sb, "", 0 ); |
295 | |
|
296 | 0 | append( sb, "lineLength (Default: 80)", 2 ); |
297 | 0 | append( sb, "The maximum length of a display line, should be positive.", 3 ); |
298 | 0 | append( sb, "", 0 ); |
299 | |
} |
300 | |
} |
301 | |
|
302 | 0 | if ( getLog().isInfoEnabled() ) |
303 | |
{ |
304 | 0 | getLog().info( sb.toString() ); |
305 | |
} |
306 | 0 | } |
307 | |
|
308 | |
|
309 | |
|
310 | |
|
311 | |
|
312 | |
|
313 | |
|
314 | |
|
315 | |
|
316 | |
|
317 | |
private static String repeat( String str, int repeat ) |
318 | |
{ |
319 | 0 | StringBuffer buffer = new StringBuffer( repeat * str.length() ); |
320 | |
|
321 | 0 | for ( int i = 0; i < repeat; i++ ) |
322 | |
{ |
323 | 0 | buffer.append( str ); |
324 | |
} |
325 | |
|
326 | 0 | return buffer.toString(); |
327 | |
} |
328 | |
|
329 | |
|
330 | |
|
331 | |
|
332 | |
|
333 | |
|
334 | |
|
335 | |
|
336 | |
|
337 | |
private void append( StringBuffer sb, String description, int indent ) |
338 | |
{ |
339 | 0 | for ( Iterator it = toLines( description, indent, indentSize, lineLength ).iterator(); it.hasNext(); ) |
340 | |
{ |
341 | 0 | sb.append( it.next().toString() ).append( '\n' ); |
342 | |
} |
343 | 0 | } |
344 | |
|
345 | |
|
346 | |
|
347 | |
|
348 | |
|
349 | |
|
350 | |
|
351 | |
|
352 | |
|
353 | |
|
354 | |
|
355 | |
private static List toLines( String text, int indent, int indentSize, int lineLength ) |
356 | |
{ |
357 | 0 | List lines = new ArrayList(); |
358 | |
|
359 | 0 | String ind = repeat( "\t", indent ); |
360 | 0 | String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" ); |
361 | 0 | for ( int i = 0; i < plainLines.length; i++ ) |
362 | |
{ |
363 | 0 | toLines( lines, ind + plainLines[i], indentSize, lineLength ); |
364 | |
} |
365 | |
|
366 | 0 | return lines; |
367 | |
} |
368 | |
|
369 | |
|
370 | |
|
371 | |
|
372 | |
|
373 | |
|
374 | |
|
375 | |
|
376 | |
|
377 | |
private static void toLines( List lines, String line, int indentSize, int lineLength ) |
378 | |
{ |
379 | 0 | int lineIndent = getIndentLevel( line ); |
380 | 0 | StringBuffer buf = new StringBuffer( 256 ); |
381 | 0 | String[] tokens = line.split( " +" ); |
382 | 0 | for ( int i = 0; i < tokens.length; i++ ) |
383 | |
{ |
384 | 0 | String token = tokens[i]; |
385 | 0 | if ( i > 0 ) |
386 | |
{ |
387 | 0 | if ( buf.length() + token.length() >= lineLength ) |
388 | |
{ |
389 | 0 | lines.add( buf.toString() ); |
390 | 0 | buf.setLength( 0 ); |
391 | 0 | buf.append( repeat( " ", lineIndent * indentSize ) ); |
392 | |
} |
393 | |
else |
394 | |
{ |
395 | 0 | buf.append( ' ' ); |
396 | |
} |
397 | |
} |
398 | 0 | for ( int j = 0; j < token.length(); j++ ) |
399 | |
{ |
400 | 0 | char c = token.charAt( j ); |
401 | 0 | if ( c == '\t' ) |
402 | |
{ |
403 | 0 | buf.append( repeat( " ", indentSize - buf.length() % indentSize ) ); |
404 | |
} |
405 | 0 | else if ( c == '\u00A0' ) |
406 | |
{ |
407 | 0 | buf.append( ' ' ); |
408 | |
} |
409 | |
else |
410 | |
{ |
411 | 0 | buf.append( c ); |
412 | |
} |
413 | |
} |
414 | |
} |
415 | 0 | lines.add( buf.toString() ); |
416 | 0 | } |
417 | |
|
418 | |
|
419 | |
|
420 | |
|
421 | |
|
422 | |
|
423 | |
|
424 | |
private static int getIndentLevel( String line ) |
425 | |
{ |
426 | 0 | int level = 0; |
427 | 0 | for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ ) |
428 | |
{ |
429 | 0 | level++; |
430 | |
} |
431 | 0 | for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ ) |
432 | |
{ |
433 | 0 | if ( line.charAt( i ) == '\t' ) |
434 | |
{ |
435 | 0 | level++; |
436 | 0 | break; |
437 | |
} |
438 | |
} |
439 | 0 | return level; |
440 | |
} |
441 | |
} |