1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.ear.util;
20
21 import java.util.List;
22 import java.util.Set;
23
24 import org.apache.maven.archiver.MavenArchiveConfiguration;
25 import org.apache.maven.archiver.MavenArchiver;
26 import org.apache.maven.artifact.DependencyResolutionRequiredException;
27 import org.apache.maven.execution.MavenSession;
28 import org.apache.maven.plugins.ear.EarModule;
29 import org.apache.maven.project.MavenProject;
30 import org.codehaus.plexus.archiver.jar.Manifest;
31 import org.codehaus.plexus.archiver.jar.ManifestException;
32
33
34
35
36
37
38
39 public class EarMavenArchiver extends MavenArchiver {
40
41
42
43 public static final String CLASS_PATH_KEY = "Class-Path";
44
45 private final List<EarModule> earModules;
46
47
48
49
50
51
52 public EarMavenArchiver(List<EarModule> earModules) {
53 this.earModules = earModules;
54 }
55
56
57
58
59
60
61
62
63
64 public Manifest getManifest(MavenProject project, MavenArchiveConfiguration config)
65 throws ManifestException, DependencyResolutionRequiredException {
66 return this.getManifest(null, project, config);
67 }
68
69
70 public Manifest getManifest(MavenSession session, MavenProject project, MavenArchiveConfiguration config)
71 throws ManifestException, DependencyResolutionRequiredException {
72 final Manifest manifest = super.getManifest(session, project, config);
73 if (config.getManifest().isAddClasspath()) {
74 String earManifestClassPathEntry =
75 generateClassPathEntry(config.getManifest().getClasspathPrefix());
76
77
78 final String userSuppliedClassPathEntry = getUserSuppliedClassPathEntry(config);
79 if (userSuppliedClassPathEntry != null) {
80 earManifestClassPathEntry = userSuppliedClassPathEntry + " " + earManifestClassPathEntry;
81 }
82
83
84 final Manifest.Attribute classPathAttr = manifest.getMainSection().getAttribute(CLASS_PATH_KEY);
85 if (classPathAttr != null) {
86 classPathAttr.setValue(earManifestClassPathEntry);
87 } else {
88 final Manifest.Attribute attr = new Manifest.Attribute(CLASS_PATH_KEY, earManifestClassPathEntry);
89 manifest.addConfiguredAttribute(attr);
90 }
91 }
92 return manifest;
93 }
94
95
96
97
98
99
100
101 protected String generateClassPathEntry(String classPathPrefix) {
102 final StringBuilder classpath = new StringBuilder();
103 for (final EarModule earModule : earModules) {
104 if (!earModule.isExcluded()) {
105 classpath.append(classPathPrefix).append(earModule.getUri()).append(" ");
106 }
107 }
108 return classpath.toString().trim();
109 }
110
111
112
113
114
115 protected String getUserSuppliedClassPathEntry(MavenArchiveConfiguration config) {
116 if (config.getManifestEntries() != null) {
117 final Set<String> keys = config.getManifestEntries().keySet();
118 for (String key : keys) {
119 String value = config.getManifestEntries().get(key);
120 if ("Class-Path".equals(key) && value != null) {
121 return value;
122 }
123 }
124 }
125 return null;
126 }
127 }