1 package org.apache.maven.plugin.resources;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.execution.MavenSession;
23 import org.apache.maven.model.Resource;
24 import org.apache.maven.plugin.AbstractMojo;
25 import org.apache.maven.plugin.MojoExecutionException;
26 import org.apache.maven.project.MavenProject;
27 import org.apache.maven.shared.filtering.MavenFilteringException;
28 import org.apache.maven.shared.filtering.MavenResourcesExecution;
29 import org.apache.maven.shared.filtering.MavenResourcesFiltering;
30 import org.codehaus.plexus.util.ReaderFactory;
31 import org.codehaus.plexus.util.StringUtils;
32
33 import java.io.File;
34 import java.util.ArrayList;
35 import java.util.Collection;
36 import java.util.Collections;
37 import java.util.Iterator;
38 import java.util.LinkedHashSet;
39 import java.util.List;
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class ResourcesMojo
55 extends AbstractMojo
56 {
57
58
59
60
61
62
63 protected String encoding;
64
65
66
67
68
69
70
71 private File outputDirectory;
72
73
74
75
76
77
78
79
80 private List resources;
81
82
83
84
85
86
87 protected MavenProject project;
88
89
90
91
92
93
94
95
96
97
98
99 protected List buildFilters;
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 protected List filters;
116
117
118
119
120
121
122
123
124
125 protected boolean useBuildFilters;
126
127
128
129
130
131
132 protected MavenResourcesFiltering mavenResourcesFiltering;
133
134
135
136
137
138
139 protected MavenSession session;
140
141
142
143
144
145
146
147 protected String escapeString;
148
149
150
151
152
153
154 private boolean overwrite;
155
156
157
158
159
160
161 protected boolean includeEmptyDirs;
162
163
164
165
166
167
168 protected List nonFilteredFileExtensions;
169
170
171
172
173
174
175 protected boolean escapeWindowsPaths;
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196 protected List delimiters;
197
198
199
200
201
202 protected boolean useDefaultDelimiters;
203
204 public void execute()
205 throws MojoExecutionException
206 {
207 try
208 {
209
210 if ( StringUtils.isEmpty( encoding ) && isFilteringEnabled( getResources() ) )
211 {
212 getLog().warn(
213 "File encoding has not been set, using platform encoding " + ReaderFactory.FILE_ENCODING
214 + ", i.e. build is platform dependent!" );
215 }
216
217 List filters = getCombinedFiltersList();
218
219 MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( getResources(),
220 getOutputDirectory(),
221 project, encoding, filters,
222 Collections.EMPTY_LIST,
223 session );
224
225 mavenResourcesExecution.setEscapeWindowsPaths( escapeWindowsPaths );
226
227
228
229 mavenResourcesExecution.setInjectProjectBuildFilters( false );
230
231 mavenResourcesExecution.setEscapeString( escapeString );
232 mavenResourcesExecution.setOverwrite( overwrite );
233 mavenResourcesExecution.setIncludeEmptyDirs( includeEmptyDirs );
234
235
236 if ( delimiters != null && !delimiters.isEmpty() )
237 {
238 LinkedHashSet delims = new LinkedHashSet();
239 if ( useDefaultDelimiters )
240 {
241 delims.addAll( mavenResourcesExecution.getDelimiters() );
242 }
243
244 for ( Iterator dIt = delimiters.iterator(); dIt.hasNext(); )
245 {
246 String delim = (String) dIt.next();
247 if ( delim == null )
248 {
249
250 delims.add( "${*}" );
251 }
252 else
253 {
254 delims.add( delim );
255 }
256 }
257
258 mavenResourcesExecution.setDelimiters( delims );
259 }
260
261 if ( nonFilteredFileExtensions != null )
262 {
263 mavenResourcesExecution.setNonFilteredFileExtensions( nonFilteredFileExtensions );
264 }
265 mavenResourcesFiltering.filterResources( mavenResourcesExecution );
266 }
267 catch ( MavenFilteringException e )
268 {
269 throw new MojoExecutionException( e.getMessage(), e );
270 }
271 }
272
273 protected List getCombinedFiltersList()
274 {
275 if ( filters == null || filters.isEmpty() )
276 {
277 return useBuildFilters ? buildFilters : null;
278 }
279 else
280 {
281 List result = new ArrayList();
282
283 if ( useBuildFilters && buildFilters != null && !buildFilters.isEmpty() )
284 {
285 result.addAll( buildFilters );
286 }
287
288 result.addAll( filters );
289
290 return result;
291 }
292 }
293
294
295
296
297
298
299
300 private boolean isFilteringEnabled( Collection resources )
301 {
302 if ( resources != null )
303 {
304 for ( Iterator i = resources.iterator(); i.hasNext(); )
305 {
306 Resource resource = (Resource) i.next();
307 if ( resource.isFiltering() )
308 {
309 return true;
310 }
311 }
312 }
313 return false;
314 }
315
316 public List getResources()
317 {
318 return resources;
319 }
320
321 public void setResources( List resources )
322 {
323 this.resources = resources;
324 }
325
326 public File getOutputDirectory()
327 {
328 return outputDirectory;
329 }
330
331 public void setOutputDirectory( File outputDirectory )
332 {
333 this.outputDirectory = outputDirectory;
334 }
335
336 public boolean isOverwrite()
337 {
338 return overwrite;
339 }
340
341 public void setOverwrite( boolean overwrite )
342 {
343 this.overwrite = overwrite;
344 }
345
346 public boolean isIncludeEmptyDirs()
347 {
348 return includeEmptyDirs;
349 }
350
351 public void setIncludeEmptyDirs( boolean includeEmptyDirs )
352 {
353 this.includeEmptyDirs = includeEmptyDirs;
354 }
355
356 public List getFilters()
357 {
358 return filters;
359 }
360
361 public void setFilters( List filters )
362 {
363 this.filters = filters;
364 }
365
366 public List getDelimiters()
367 {
368 return delimiters;
369 }
370
371 public void setDelimiters( List delimiters )
372 {
373 this.delimiters = delimiters;
374 }
375
376 public boolean isUseDefaultDelimiters()
377 {
378 return useDefaultDelimiters;
379 }
380
381 public void setUseDefaultDelimiters( boolean useDefaultDelimiters )
382 {
383 this.useDefaultDelimiters = useDefaultDelimiters;
384 }
385
386 }