1 package org.apache.maven.plugin.war;
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.archiver.MavenArchiver;
23 import org.apache.maven.artifact.DependencyResolutionRequiredException;
24 import org.apache.maven.plugin.MojoExecutionException;
25 import org.apache.maven.plugins.annotations.Component;
26 import org.apache.maven.plugins.annotations.LifecyclePhase;
27 import org.apache.maven.plugins.annotations.Mojo;
28 import org.apache.maven.plugins.annotations.ResolutionScope;
29 import org.codehaus.plexus.archiver.Archiver;
30 import org.codehaus.plexus.archiver.jar.Manifest;
31 import org.codehaus.plexus.archiver.jar.ManifestException;
32 import org.codehaus.plexus.archiver.war.WarArchiver;
33 import org.codehaus.plexus.util.IOUtil;
34 import org.codehaus.plexus.util.WriterFactory;
35
36 import java.io.File;
37 import java.io.IOException;
38 import java.io.PrintWriter;
39
40
41
42
43
44
45
46
47 @Mojo( name = "manifest", defaultPhase = LifecyclePhase.PROCESS_RESOURCES, threadSafe = true, requiresDependencyResolution = ResolutionScope.RUNTIME )
48
49 public class WarManifestMojo
50 extends AbstractWarMojo
51 {
52
53
54
55 @Component( role = Archiver.class, hint = "war" )
56 private WarArchiver warArchiver;
57
58
59
60
61
62
63 public void execute()
64 throws MojoExecutionException
65 {
66 File manifestDir = new File( getWarSourceDirectory(), "META-INF" );
67 if ( !manifestDir.exists() )
68 {
69 manifestDir.mkdirs();
70 }
71 File manifestFile = new File( manifestDir, "MANIFEST.MF" );
72 MavenArchiver ma = new MavenArchiver();
73 ma.setArchiver( warArchiver );
74 ma.setOutputFile( manifestFile );
75
76 PrintWriter printWriter = null;
77 try
78 {
79 Manifest mf = ma.getManifest( getSession(), getProject(), getArchive() );
80 printWriter = new PrintWriter( WriterFactory.newWriter( manifestFile, WriterFactory.UTF_8 ) );
81 mf.write( printWriter );
82 }
83 catch ( ManifestException e )
84 {
85 throw new MojoExecutionException( "Error preparing the manifest: " + e.getMessage(), e );
86 }
87 catch ( DependencyResolutionRequiredException e )
88 {
89 throw new MojoExecutionException( "Error preparing the manifest: " + e.getMessage(), e );
90 }
91 catch ( IOException e )
92 {
93 throw new MojoExecutionException( "Error preparing the manifest: " + e.getMessage(), e );
94 }
95 finally
96 {
97 IOUtil.close( printWriter );
98 }
99 }
100 }