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
34 import java.io.File;
35 import java.io.FileInputStream;
36 import java.io.FileNotFoundException;
37 import java.io.IOException;
38 import java.io.InputStreamReader;
39 import java.io.Reader;
40 import java.nio.charset.StandardCharsets;
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 try ( Reader manifestFileReader =
85 new InputStreamReader( new FileInputStream( manifestFile ), StandardCharsets.UTF_8 ) )
86 {
87 manifest = new Manifest( manifestFileReader );
88 }
89 catch ( final FileNotFoundException e )
90 {
91 throw new ArchiverException( "Manifest not found: " + e.getMessage(), e );
92 }
93 catch ( final IOException e )
94 {
95 throw new ArchiverException( "Error processing manifest: " + e.getMessage(), e );
96 }
97 }
98 else
99 {
100 manifest = mavenArchiver.getManifest( session, project, archiveConfiguration );
101 }
102
103 if ( ( manifest != null ) && ( archiver instanceof JarArchiver ) )
104 {
105 final JarArchiver jarArchiver = (JarArchiver) archiver;
106 jarArchiver.addConfiguredManifest( manifest );
107 }
108 }
109 catch ( final ManifestException e )
110 {
111 throw new ArchiverException( "Error creating manifest: " + e.getMessage(), e );
112 }
113 catch ( final DependencyResolutionRequiredException e )
114 {
115 throw new ArchiverException( "Dependencies were not resolved: " + e.getMessage(), e );
116 }
117 }
118 }
119
120 @Override
121 public List<String> getVirtualFiles()
122 {
123 if ( archiveConfiguration != null )
124 {
125 try
126 {
127 if ( mavenArchiver.getManifest( project, archiveConfiguration.getManifest() ) != null )
128 {
129 return Collections.singletonList( "META-INF/MANIFEST.MF" );
130 }
131 }
132 catch ( final ManifestException | DependencyResolutionRequiredException ignore )
133 {
134
135 }
136 }
137
138 return null;
139 }
140
141 }