Skip to content

Commit 9e6fa39

Browse files
committed
U added new manifest property, with manifest sections support
1 parent 1115861 commit 9e6fa39

File tree

9 files changed

+161
-34
lines changed

9 files changed

+161
-34
lines changed

src/main/java/io/github/fvarrui/javapackager/gradle/CreateRunnableJar.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
import java.util.ArrayList;
55
import java.util.Arrays;
66
import java.util.List;
7-
import java.util.Map;
87
import java.util.stream.Collectors;
98

109
import org.apache.commons.lang3.StringUtils;
1110
import org.gradle.api.Project;
1211
import org.gradle.api.tasks.bundling.Jar;
1312

13+
import io.github.fvarrui.javapackager.model.Manifest;
14+
import io.github.fvarrui.javapackager.packagers.ArtifactGenerator;
1415
import io.github.fvarrui.javapackager.packagers.Context;
1516
import io.github.fvarrui.javapackager.packagers.Packager;
16-
import io.github.fvarrui.javapackager.packagers.ArtifactGenerator;
1717

1818
/**
1919
* Creates a runnable jar file from sources on Maven context
@@ -34,7 +34,7 @@ public File apply(Packager packager) {
3434
File outputDirectory = packager.getOutputDirectory();
3535
Project project = Context.getGradleContext().getProject();
3636
File libsFolder = packager.getLibsFolder();
37-
Map<String, String> additionalManifestEntries = packager.getAdditionalManifestEntries();
37+
Manifest manifest = packager.getManifest();
3838

3939
List<String> dependencies = new ArrayList<>();
4040
if (libsFolder != null && libsFolder.exists()) {
@@ -46,11 +46,15 @@ public File apply(Packager packager) {
4646
jarTask.setProperty("archiveVersion", version);
4747
jarTask.setProperty("archiveClassifier", classifier);
4848
jarTask.setProperty("destinationDirectory", outputDirectory);
49-
jarTask.getManifest().getAttributes().put("Main-Class", mainClass);
49+
jarTask.getManifest().getAttributes().put("Created-By", "Gradle " + Context.getGradleContext().getProject().getGradle().getGradleVersion());
50+
jarTask.getManifest().getAttributes().put("Built-By", System.getProperty("user.name"));
51+
jarTask.getManifest().getAttributes().put("Build-Jdk", System.getProperty("java.version"));
5052
jarTask.getManifest().getAttributes().put("Class-Path", StringUtils.join(dependencies, " "));
51-
for (String key : additionalManifestEntries.keySet()) {
52-
jarTask.getManifest().getAttributes().put(key, additionalManifestEntries.get(key));
53-
}
53+
jarTask.getManifest().getAttributes().put("Main-Class", mainClass);
54+
jarTask.getManifest().attributes(manifest.getAdditionalEntries());
55+
56+
manifest.getSections().stream().forEach(s -> jarTask.getManifest().attributes(s.getEntries(), s.getName()));
57+
5458
jarTask.getActions().forEach(action -> action.execute(jarTask));
5559

5660
return jarTask.getArchiveFile().get().getAsFile();

src/main/java/io/github/fvarrui/javapackager/gradle/PackagePluginExtension.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import groovy.lang.Closure;
1010
import io.github.fvarrui.javapackager.model.LinuxConfig;
1111
import io.github.fvarrui.javapackager.model.MacConfig;
12+
import io.github.fvarrui.javapackager.model.Manifest;
1213
import io.github.fvarrui.javapackager.model.Platform;
1314
import io.github.fvarrui.javapackager.model.WindowsConfig;
1415
import io.github.fvarrui.javapackager.packagers.PackagerSettings;
@@ -36,6 +37,7 @@ public PackagePluginExtension(Project project) {
3637
this.jreDirectoryName = "jre";
3738
this.linuxConfig = new LinuxConfig();
3839
this.macConfig = new MacConfig();
40+
this.manifest = new Manifest();
3941
this.modules = new ArrayList<>();
4042
this.name = project.getName();
4143
this.organizationEmail = "";
@@ -62,5 +64,11 @@ public WindowsConfig winConfig(Closure<WindowsConfig> closure) {
6264
project.configure(winConfig, closure);
6365
return winConfig;
6466
}
67+
68+
public Manifest manifest(Closure<Manifest> closure) {
69+
manifest = new Manifest();
70+
project.configure(manifest, closure);
71+
return manifest;
72+
}
6573

6674
}

src/main/java/io/github/fvarrui/javapackager/gradle/PackageTask.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import groovy.lang.Closure;
1717
import io.github.fvarrui.javapackager.model.LinuxConfig;
1818
import io.github.fvarrui.javapackager.model.MacConfig;
19+
import io.github.fvarrui.javapackager.model.Manifest;
1920
import io.github.fvarrui.javapackager.model.Platform;
2021
import io.github.fvarrui.javapackager.model.WindowsConfig;
2122
import io.github.fvarrui.javapackager.packagers.Packager;
@@ -487,16 +488,18 @@ public void setJreMinVersion(String jreMinVersion) {
487488

488489
@Input
489490
@Optional
490-
private Map<String, String> additionalManifestEntries;
491+
private Manifest manifest;
491492

492-
public Map<String, String> getAdditionalManifestEntries() {
493-
return additionalManifestEntries;
494-
}
495-
496-
public void setAdditionalManifestEntries(Map<String, String> additionalManifestEntries) {
497-
this.additionalManifestEntries = additionalManifestEntries;
493+
public Manifest getManifest() {
494+
return manifest;
498495
}
499496

497+
public Manifest manifest(Closure<Manifest> closure) {
498+
manifest = new Manifest();
499+
getProject().configure(manifest, closure);
500+
return manifest;
501+
}
502+
500503
// ===============
501504
// create packager
502505
// ===============
@@ -510,7 +513,6 @@ protected Packager createPackager() throws Exception {
510513
return
511514
(Packager) PackagerFactory
512515
.createPackager(defaultIfNull(platform, extension.getPlatform()))
513-
.additionalManifestEntries(defaultIfNull(additionalManifestEntries, extension.getAdditionalManifestEntries()))
514516
.additionalModules(defaultIfNull(additionalModules, extension.getAdditionalModules()))
515517
.additionalResources(defaultIfNull(additionalResources, extension.getAdditionalResources()))
516518
.administratorRequired(defaultIfNull(administratorRequired, extension.getAdministratorRequired()))
@@ -535,6 +537,7 @@ protected Packager createPackager() throws Exception {
535537
.linuxConfig(defaultIfNull(linuxConfig, extension.getLinuxConfig()))
536538
.macConfig(defaultIfNull(macConfig, extension.getMacConfig()))
537539
.mainClass(defaultIfNull(mainClass, extension.getMainClass()))
540+
.manifest(defaultIfNull(manifest, extension.getManifest()))
538541
.modules(defaultIfNull(modules, extension.getModules()))
539542
.name(defaultIfNull(appName, extension.getName()))
540543
.organizationEmail(defaultIfNull(organizationEmail, extension.getOrganizationEmail()))

src/main/java/io/github/fvarrui/javapackager/maven/CreateRunnableJar.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@
1212
import java.io.File;
1313
import java.util.ArrayList;
1414
import java.util.List;
15-
import java.util.Map;
15+
import java.util.stream.Collectors;
1616

1717
import org.apache.maven.plugin.MojoExecutionException;
1818
import org.twdata.maven.mojoexecutor.MojoExecutor.Element;
1919
import org.twdata.maven.mojoexecutor.MojoExecutor.ExecutionEnvironment;
2020

21+
import io.github.fvarrui.javapackager.model.Manifest;
22+
import io.github.fvarrui.javapackager.packagers.ArtifactGenerator;
2123
import io.github.fvarrui.javapackager.packagers.Context;
2224
import io.github.fvarrui.javapackager.packagers.Packager;
23-
import io.github.fvarrui.javapackager.packagers.ArtifactGenerator;
2425
import io.github.fvarrui.javapackager.utils.Logger;
26+
import io.github.fvarrui.javapackager.utils.MavenUtils;
2527

2628
/**
2729
* Creates a runnable jar file from sources on Maven context
@@ -41,7 +43,7 @@ public File apply(Packager packager) {
4143
String mainClass = packager.getMainClass();
4244
File outputDirectory = packager.getOutputDirectory();
4345
ExecutionEnvironment env = Context.getMavenContext().getEnv();
44-
Map<String, String> additionalManifestEntries = packager.getAdditionalManifestEntries();
46+
Manifest manifest = packager.getManifest();
4547

4648
File jarFile = new File(outputDirectory, name + "-" + version + "-" + classifier + ".jar");
4749

@@ -51,13 +53,24 @@ public File apply(Packager packager) {
5153
element("addClasspath", "true"),
5254
element("classpathPrefix", "libs/"),
5355
element("mainClass", mainClass)
54-
));
55-
if (additionalManifestEntries != null && !additionalManifestEntries.isEmpty()) {
56-
List<Element> manifestEntries = new ArrayList<>();
57-
for (String key : additionalManifestEntries.keySet()) {
58-
manifestEntries.add(element(key, additionalManifestEntries.get(key)));
59-
}
60-
archive.add(element("manifestEntries", manifestEntries.toArray(new Element[manifestEntries.size()])));
56+
)
57+
);
58+
if (manifest != null) {
59+
60+
archive.add(MavenUtils.mapToElement("manifestEntries", manifest.getAdditionalEntries()));
61+
62+
List<Element> manifestSections =
63+
manifest
64+
.getSections()
65+
.stream()
66+
.map(s -> element("manifestSection",
67+
element("Name", s.getName()),
68+
MavenUtils.mapToElement("manifestEntries", s.getEntries())
69+
))
70+
.collect(Collectors.toList());
71+
72+
archive.add(element("manifestSections", manifestSections.toArray(new Element[manifestSections.size()])));
73+
6174
}
6275

6376
try {

src/main/java/io/github/fvarrui/javapackager/maven/PackageMojo.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import io.github.fvarrui.javapackager.model.LinuxConfig;
2222
import io.github.fvarrui.javapackager.model.MacConfig;
23+
import io.github.fvarrui.javapackager.model.Manifest;
2324
import io.github.fvarrui.javapackager.model.Platform;
2425
import io.github.fvarrui.javapackager.model.WindowsConfig;
2526
import io.github.fvarrui.javapackager.packagers.Context;
@@ -277,7 +278,7 @@ public class PackageMojo extends AbstractMojo {
277278
* Additional JAR manifest entries
278279
*/
279280
@Parameter(required = false)
280-
private Map<String, String> additionalManifestEntries;
281+
private Manifest manifest;
281282

282283
public void execute() throws MojoExecutionException {
283284

@@ -293,7 +294,6 @@ public void execute() throws MojoExecutionException {
293294
Packager packager =
294295
(Packager) PackagerFactory
295296
.createPackager(platform)
296-
.additionalManifestEntries(additionalManifestEntries)
297297
.additionalModules(additionalModules)
298298
.additionalResources(additionalResources)
299299
.administratorRequired(administratorRequired)
@@ -318,6 +318,7 @@ public void execute() throws MojoExecutionException {
318318
.linuxConfig(linuxConfig)
319319
.macConfig(macConfig)
320320
.mainClass(mainClass)
321+
.manifest(manifest)
321322
.modules(modules)
322323
.name(defaultIfBlank(name, Context.getMavenContext().getEnv().getMavenProject().getArtifactId()))
323324
.organizationEmail(organizationEmail)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.github.fvarrui.javapackager.model;
2+
3+
import java.io.Serializable;
4+
import java.util.ArrayList;
5+
import java.util.HashMap;
6+
import java.util.List;
7+
import java.util.Map;
8+
9+
public class Manifest implements Serializable {
10+
private static final long serialVersionUID = -7271763575775465174L;
11+
12+
private Map<String, String> additionalEntries = new HashMap<>();
13+
private List<ManifestSection> sections = new ArrayList<>();
14+
15+
public Map<String, String> getAdditionalEntries() {
16+
return additionalEntries;
17+
}
18+
19+
public void setAdditionalEntries(Map<String, String> additionalEntries) {
20+
this.additionalEntries = additionalEntries;
21+
}
22+
23+
public List<ManifestSection> getSections() {
24+
return sections;
25+
}
26+
27+
public void setSections(List<ManifestSection> sections) {
28+
this.sections = sections;
29+
}
30+
31+
@Override
32+
public String toString() {
33+
return "Manifest [additionalEntries=" + additionalEntries + ", sections=" + sections + "]";
34+
}
35+
36+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.github.fvarrui.javapackager.model;
2+
3+
import java.io.Serializable;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
public class ManifestSection implements Serializable {
8+
private static final long serialVersionUID = 118641813298011799L;
9+
10+
private String name;
11+
private Map<String, String> entries = new HashMap<>();
12+
13+
public String getName() {
14+
return name;
15+
}
16+
17+
public void setName(String name) {
18+
this.name = name;
19+
}
20+
21+
public Map<String, String> getEntries() {
22+
return entries;
23+
}
24+
25+
public void setEntries(Map<String, String> entries) {
26+
this.entries = entries;
27+
}
28+
29+
@Override
30+
public String toString() {
31+
return "ManifestSection [name=" + name + ", entries=" + entries + "]";
32+
}
33+
34+
}

src/main/java/io/github/fvarrui/javapackager/packagers/PackagerSettings.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import io.github.fvarrui.javapackager.model.LinuxConfig;
99
import io.github.fvarrui.javapackager.model.MacConfig;
10+
import io.github.fvarrui.javapackager.model.Manifest;
1011
import io.github.fvarrui.javapackager.model.Platform;
1112
import io.github.fvarrui.javapackager.model.WindowsConfig;
1213

@@ -49,7 +50,7 @@ public class PackagerSettings {
4950
protected File assetsDir;
5051
protected String classpath;
5152
protected String jreMinVersion;
52-
protected Map<String, String> additionalManifestEntries;
53+
protected Manifest manifest;
5354

5455
public File getOutputDirectory() {
5556
return outputDirectory;
@@ -199,8 +200,8 @@ public String getJreMinVersion() {
199200
return jreMinVersion;
200201
}
201202

202-
public Map<String, String> getAdditionalManifestEntries() {
203-
return additionalManifestEntries;
203+
public Manifest getManifest() {
204+
return manifest;
204205
}
205206

206207
// fluent api
@@ -390,8 +391,8 @@ public PackagerSettings jreMinVersion(String jreMinVersion) {
390391
return this;
391392
}
392393

393-
public PackagerSettings additionalManifestEntries(Map<String, String> additionalManifestEntries) {
394-
this.additionalManifestEntries = additionalManifestEntries;
394+
public PackagerSettings manifest(Manifest manifest) {
395+
this.manifest = manifest;
395396
return this;
396397
}
397398

@@ -409,8 +410,8 @@ public String toString() {
409410
+ jreDirectoryName + ", winConfig=" + winConfig + ", linuxConfig=" + linuxConfig + ", macConfig="
410411
+ macConfig + ", createTarball=" + createTarball + ", createZipball=" + createZipball + ", extra="
411412
+ extra + ", useResourcesAsWorkingDir=" + useResourcesAsWorkingDir + ", assetsDir=" + assetsDir
412-
+ ", classpath=" + classpath + ", jreMinVersion=" + jreMinVersion + ", additionalManifestEntries="
413-
+ additionalManifestEntries + "]";
413+
+ ", classpath=" + classpath + ", jreMinVersion=" + jreMinVersion + ", manifest="
414+
+ manifest + "]";
414415
}
415416

416417
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.github.fvarrui.javapackager.utils;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
import org.twdata.maven.mojoexecutor.MojoExecutor.Element;
8+
import static org.twdata.maven.mojoexecutor.MojoExecutor.element;
9+
10+
public class MavenUtils {
11+
12+
public static List<Element> mapToElementsList(Map<String, String> map) {
13+
List<Element> elements = new ArrayList<>();
14+
map.entrySet().forEach(entry -> elements.add(element(entry.getKey(), entry.getValue())));
15+
return elements;
16+
}
17+
18+
public static Element [] mapToElementsArray(Map<String, String> map) {
19+
List<Element> elements = mapToElementsList(map);
20+
return elements.toArray(new Element[elements.size()]);
21+
}
22+
23+
public static Element mapToElement(String name, Map<String, String> map) {
24+
return element(name, mapToElementsArray(map));
25+
}
26+
27+
}

0 commit comments

Comments
 (0)