1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.assembly.archive;
20
21 import java.io.File;
22 import java.io.FileInputStream;
23 import java.io.FileNotFoundException;
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.Map;
29
30 import org.apache.maven.archiver.MavenArchiveConfiguration;
31 import org.apache.maven.archiver.MavenArchiver;
32 import org.apache.maven.artifact.DependencyResolutionRequiredException;
33 import org.apache.maven.execution.MavenSession;
34 import org.apache.maven.project.MavenProject;
35 import org.codehaus.plexus.archiver.AbstractArchiveFinalizer;
36 import org.codehaus.plexus.archiver.Archiver;
37 import org.codehaus.plexus.archiver.ArchiverException;
38 import org.codehaus.plexus.archiver.jar.JarArchiver;
39 import org.codehaus.plexus.archiver.jar.Manifest;
40 import org.codehaus.plexus.archiver.jar.ManifestException;
41
42
43
44
45 public class ManifestCreationFinalizer extends AbstractArchiveFinalizer {
46
47 private final MavenProject project;
48
49 private final MavenSession session;
50
51 private final MavenArchiveConfiguration archiveConfiguration;
52
53
54
55
56
57
58 private final MavenArchiver mavenArchiver = new MavenArchiver();
59
60 public ManifestCreationFinalizer(
61 final MavenSession session,
62 final MavenProject project,
63 final MavenArchiveConfiguration archiveConfiguration) {
64 this.session = session;
65 this.project = project;
66 this.archiveConfiguration = archiveConfiguration;
67 }
68
69 @Override
70 public void finalizeArchiveCreation(final Archiver archiver) {
71 if (archiveConfiguration != null) {
72 try {
73 Manifest manifest;
74 final File manifestFile = archiveConfiguration.getManifestFile();
75
76 if (manifestFile != null) {
77 try (InputStream in = new FileInputStream(manifestFile)) {
78 manifest = new Manifest(in);
79 } catch (final FileNotFoundException e) {
80 throw new ArchiverException("Manifest not found: " + e.getMessage(), e);
81 } catch (final IOException e) {
82 throw new ArchiverException("Error processing manifest: " + e.getMessage(), e);
83 }
84 } else {
85 manifest = mavenArchiver.getManifest(session, project, archiveConfiguration);
86 }
87
88 if (manifest != null
89 && !archiveConfiguration.getManifestEntries().isEmpty()) {
90 for (Map.Entry<String, String> entry :
91 archiveConfiguration.getManifestEntries().entrySet()) {
92 manifest.getMainSection()
93 .addConfiguredAttribute(new Manifest.Attribute(entry.getKey(), entry.getValue()));
94 }
95 }
96
97 if ((manifest != null) && (archiver instanceof JarArchiver)) {
98 final JarArchiver jarArchiver = (JarArchiver) archiver;
99 jarArchiver.addConfiguredManifest(manifest);
100 }
101 } catch (final ManifestException e) {
102 throw new ArchiverException("Error creating manifest: " + e.getMessage(), e);
103 } catch (final DependencyResolutionRequiredException e) {
104 throw new ArchiverException("Dependencies were not resolved: " + e.getMessage(), e);
105 }
106 }
107 }
108
109 @Override
110 public List<String> getVirtualFiles() {
111 if (archiveConfiguration != null) {
112 try {
113 if (mavenArchiver.getManifest(project, archiveConfiguration.getManifest()) != null) {
114 return Collections.singletonList("META-INF/MANIFEST.MF");
115 }
116 } catch (final ManifestException | DependencyResolutionRequiredException ignore) {
117
118 }
119 }
120
121 return null;
122 }
123 }