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
This commit is contained in:
Janne Valkealahti
2022-09-13 09:26:42 +01:00
parent 46b2b54b1e
commit 754e00d0ae
2 changed files with 41 additions and 0 deletions

View File

@@ -17,10 +17,17 @@ package org.springframework.shell.gradle;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors;
import org.gradle.api.JavaVersion;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.bundling.Jar;
import org.gradle.api.tasks.compile.JavaCompile;
import org.gradle.api.tasks.javadoc.Javadoc;
import org.gradle.api.tasks.testing.Test;
@@ -38,6 +45,7 @@ class JavaConventions {
configureJavaConventions(project);
configureJavadocConventions(project);
configureTestConventions(project);
configureJarManifestConventions(project);
});
}
@@ -79,4 +87,36 @@ class JavaConventions {
test.useJUnitPlatform();
});
}
private void configureJarManifestConventions(Project project) {
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
Set<String> sourceJarTaskNames = sourceSets.stream().map(SourceSet::getSourcesJarTaskName)
.collect(Collectors.toSet());
Set<String> javadocJarTaskNames = sourceSets.stream().map(SourceSet::getJavadocJarTaskName)
.collect(Collectors.toSet());
project.getTasks().withType(Jar.class, jar -> {
jar.manifest(manifest -> {
Map<String, Object> attributes = new TreeMap<>();
attributes.put("Automatic-Module-Name", project.getName().replace("-", "."));
attributes.put("Build-Jdk-Spec", SOURCE_AND_TARGET_COMPATIBILITY);
attributes.put("Built-By", "Spring");
attributes.put("Implementation-Title",
determineImplementationTitle(project, sourceJarTaskNames, javadocJarTaskNames, jar));
attributes.put("Implementation-Version", project.getVersion());
manifest.attributes(attributes);
});
});
}
private String determineImplementationTitle(Project project, Set<String> sourceJarTaskNames,
Set<String> javadocJarTaskNames, Jar jar) {
if (sourceJarTaskNames.contains(jar.getName())) {
return "Source for " + project.getName();
}
if (javadocJarTaskNames.contains(jar.getName())) {
return "Javadoc for " + project.getName();
}
return "Jar for " + project.getName();
}
}

View File

@@ -35,5 +35,6 @@ class StarterPlugin implements Plugin<Project> {
pluginManager.apply(SpringMavenPlugin.class);
new ArtifactoryConventions().apply(project);
new JavaConventions().apply(project);
}
}