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