1 package org.apache.maven.plugins.assembly.archive;
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.MavenArchiveConfiguration;
23 import org.apache.maven.archiver.MavenArchiver;
24 import org.apache.maven.artifact.DependencyResolutionRequiredException;
25 import org.apache.maven.execution.MavenSession;
26 import org.apache.maven.project.MavenProject;
27 import org.codehaus.plexus.archiver.AbstractArchiveFinalizer;
28 import org.codehaus.plexus.archiver.Archiver;
29 import org.codehaus.plexus.archiver.ArchiverException;
30 import org.codehaus.plexus.archiver.jar.JarArchiver;
31 import org.codehaus.plexus.archiver.jar.Manifest;
32 import org.codehaus.plexus.archiver.jar.ManifestException;
33 import org.codehaus.plexus.util.IOUtil;
34
35 import java.io.File;
36 import java.io.FileInputStream;
37 import java.io.FileNotFoundException;
38 import java.io.IOException;
39 import java.io.InputStreamReader;
40 import java.io.Reader;
41 import java.util.Collections;
42 import java.util.List;
43
44
45
46
47 public class ManifestCreationFinalizer
48 extends AbstractArchiveFinalizer
49 {
50
51 private final MavenProject project;
52
53 private final MavenSession session;
54
55 private final MavenArchiveConfiguration archiveConfiguration;
56
57
58
59
60
61
62 private final MavenArchiver mavenArchiver = new MavenArchiver();
63
64 public ManifestCreationFinalizer( final MavenSession session, final MavenProject project,
65 final MavenArchiveConfiguration archiveConfiguration )
66 {
67 this.session = session;
68 this.project = project;
69 this.archiveConfiguration = archiveConfiguration;
70 }
71
72 @Override
73 public void finalizeArchiveCreation( final Archiver archiver )
74 {
75 if ( archiveConfiguration != null )
76 {
77 try
78 {
79 Manifest manifest;
80 final File manifestFile = archiveConfiguration.getManifestFile();
81
82 if ( manifestFile != null )
83 {
84 Reader manifestFileReader = null;
85 try
86 {
87 manifestFileReader = new InputStreamReader( new FileInputStream( manifestFile ), "UTF-8" );
88 manifest = new Manifest( manifestFileReader );
89 manifestFileReader.close();
90 manifestFileReader = null;
91 }
92 catch ( final FileNotFoundException e )
93 {
94 throw new ArchiverException( "Manifest not found: " + e.getMessage(), e );
95 }
96 catch ( final IOException e )
97 {
98 throw new ArchiverException( "Error processing manifest: " + e.getMessage(), e );
99 }
100 finally
101 {
102 IOUtil.close( manifestFileReader );
103 }
104 }
105 else
106 {
107 manifest = mavenArchiver.getManifest( session, project, archiveConfiguration );
108 }
109
110 if ( ( manifest != null ) && ( archiver instanceof JarArchiver ) )
111 {
112 final JarArchiver jarArchiver = (JarArchiver) archiver;
113 jarArchiver.addConfiguredManifest( manifest );
114 }
115 }
116 catch ( final ManifestException e )
117 {
118 throw new ArchiverException( "Error creating manifest: " + e.getMessage(), e );
119 }
120 catch ( final DependencyResolutionRequiredException e )
121 {
122 throw new ArchiverException( "Dependencies were not resolved: " + e.getMessage(), e );
123 }
124 }
125 }
126
127 @Override
128 public List<String> getVirtualFiles()
129 {
130 if ( archiveConfiguration != null )
131 {
132 try
133 {
134 if ( mavenArchiver.getManifest( project, archiveConfiguration.getManifest() ) != null )
135 {
136 return Collections.singletonList( "META-INF/MANIFEST.MF" );
137 }
138 }
139 catch ( final ManifestException ignore )
140 {
141
142 }
143 catch ( final DependencyResolutionRequiredException ignore )
144 {
145
146 }
147 }
148
149 return null;
150 }
151
152 }