Skip to content

Commit 754e00d

Browse files
committed
Add Automatic-Module-Name to jar manifest
- Basically doing same what framework/boot does for jar manifests. - Copied gradle settings from boot which gives us dot format like Automatic-Module-Name: spring.shell.core - Fixes #529
1 parent 46b2b54 commit 754e00d

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

buildSrc/src/main/java/org/springframework/shell/gradle/JavaConventions.java

+40
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,17 @@
1717

1818
import java.util.Arrays;
1919
import java.util.List;
20+
import java.util.Map;
21+
import java.util.Set;
22+
import java.util.TreeMap;
23+
import java.util.stream.Collectors;
2024

2125
import org.gradle.api.JavaVersion;
2226
import org.gradle.api.Project;
2327
import org.gradle.api.plugins.JavaBasePlugin;
28+
import org.gradle.api.tasks.SourceSet;
29+
import org.gradle.api.tasks.SourceSetContainer;
30+
import org.gradle.api.tasks.bundling.Jar;
2431
import org.gradle.api.tasks.compile.JavaCompile;
2532
import org.gradle.api.tasks.javadoc.Javadoc;
2633
import org.gradle.api.tasks.testing.Test;
@@ -38,6 +45,7 @@ void apply(Project project) {
3845
configureJavaConventions(project);
3946
configureJavadocConventions(project);
4047
configureTestConventions(project);
48+
configureJarManifestConventions(project);
4149
});
4250
}
4351

@@ -79,4 +87,36 @@ private void configureTestConventions(Project project) {
7987
test.useJUnitPlatform();
8088
});
8189
}
90+
91+
private void configureJarManifestConventions(Project project) {
92+
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
93+
Set<String> sourceJarTaskNames = sourceSets.stream().map(SourceSet::getSourcesJarTaskName)
94+
.collect(Collectors.toSet());
95+
Set<String> javadocJarTaskNames = sourceSets.stream().map(SourceSet::getJavadocJarTaskName)
96+
.collect(Collectors.toSet());
97+
98+
project.getTasks().withType(Jar.class, jar -> {
99+
jar.manifest(manifest -> {
100+
Map<String, Object> attributes = new TreeMap<>();
101+
attributes.put("Automatic-Module-Name", project.getName().replace("-", "."));
102+
attributes.put("Build-Jdk-Spec", SOURCE_AND_TARGET_COMPATIBILITY);
103+
attributes.put("Built-By", "Spring");
104+
attributes.put("Implementation-Title",
105+
determineImplementationTitle(project, sourceJarTaskNames, javadocJarTaskNames, jar));
106+
attributes.put("Implementation-Version", project.getVersion());
107+
manifest.attributes(attributes);
108+
});
109+
});
110+
}
111+
112+
private String determineImplementationTitle(Project project, Set<String> sourceJarTaskNames,
113+
Set<String> javadocJarTaskNames, Jar jar) {
114+
if (sourceJarTaskNames.contains(jar.getName())) {
115+
return "Source for " + project.getName();
116+
}
117+
if (javadocJarTaskNames.contains(jar.getName())) {
118+
return "Javadoc for " + project.getName();
119+
}
120+
return "Jar for " + project.getName();
121+
}
82122
}

buildSrc/src/main/java/org/springframework/shell/gradle/StarterPlugin.java

+1
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ public void apply(Project project) {
3535
pluginManager.apply(SpringMavenPlugin.class);
3636

3737
new ArtifactoryConventions().apply(project);
38+
new JavaConventions().apply(project);
3839
}
3940
}

0 commit comments

Comments
 (0)