1 package org.apache.maven.plugin.war.packaging;
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.plugin.MojoExecutionException;
23 import org.apache.maven.plugin.war.Overlay;
24 import org.apache.maven.plugin.war.util.PathSet;
25 import org.codehaus.plexus.util.FileUtils;
26
27 import java.io.File;
28 import java.io.IOException;
29
30
31
32
33
34
35
36
37 public class OverlayPackagingTask
38 extends AbstractWarPackagingTask
39 {
40 private final Overlay overlay;
41
42
43 public OverlayPackagingTask( Overlay overlay, Overlay currentProjectOverlay )
44 {
45 if ( overlay == null )
46 {
47 throw new NullPointerException( "overlay could not be null." );
48 }
49 if ( overlay.equals( currentProjectOverlay ) )
50 {
51 throw new IllegalStateException( "Could not handle the current project with this task." );
52 }
53 this.overlay = overlay;
54 }
55
56
57 public void performPackaging( WarPackagingContext context )
58 throws MojoExecutionException
59 {
60 context.getLog().debug(
61 "OverlayPackagingTask performPackaging overlay.getTargetPath() " + overlay.getTargetPath() );
62 if ( overlay.shouldSkip() )
63 {
64 context.getLog().info( "Skipping overlay [" + overlay + "]" );
65 }
66 else
67 {
68 try
69 {
70 context.getLog().info( "Processing overlay [" + overlay + "]" );
71
72
73 final File tmpDir = unpackOverlay( context, overlay );
74
75
76 final PathSet includes = getFilesToIncludes( tmpDir, overlay.getIncludes(), overlay.getExcludes() );
77
78
79 if ( null == overlay.getTargetPath() )
80 {
81 copyFiles( overlay.getId(), context, tmpDir, includes, overlay.isFiltered() );
82 }
83 else
84 {
85
86
87 String targetPath = overlay.getTargetPath();
88 if ( !targetPath.endsWith( "/" ) )
89 {
90 targetPath = targetPath + "/";
91 }
92 copyFiles( overlay.getId(), context, tmpDir, includes, targetPath, overlay.isFiltered() );
93 }
94 }
95 catch ( IOException e )
96 {
97 throw new MojoExecutionException( "Failed to copy file for overlay [" + overlay + "]", e );
98 }
99 }
100 }
101
102
103
104
105
106
107
108
109
110
111
112
113 protected File unpackOverlay( WarPackagingContext context, Overlay overlay )
114 throws MojoExecutionException
115 {
116 final File tmpDir = getOverlayTempDirectory( context, overlay );
117
118
119 if ( FileUtils.sizeOfDirectory( tmpDir ) == 0
120 || overlay.getArtifact().getFile().lastModified() > tmpDir.lastModified() )
121 {
122 doUnpack( context, overlay.getArtifact().getFile(), tmpDir );
123 }
124 else
125 {
126 context.getLog().debug( "Overlay [" + overlay + "] was already unpacked" );
127 }
128 return tmpDir;
129 }
130
131
132
133
134
135
136
137
138 protected File getOverlayTempDirectory( WarPackagingContext context, Overlay overlay )
139 {
140 final File groupIdDir = new File( context.getOverlaysWorkDirectory(), overlay.getGroupId() );
141 if ( !groupIdDir.exists() )
142 {
143 groupIdDir.mkdir();
144 }
145 String directoryName = overlay.getArtifactId();
146 if ( overlay.getClassifier() != null )
147 {
148 directoryName = directoryName + "-" + overlay.getClassifier();
149 }
150 final File result = new File( groupIdDir, directoryName );
151 if ( !result.exists() )
152 {
153 result.mkdirs();
154 }
155 return result;
156 }
157 }