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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,5 +35,6 @@ class StarterPlugin implements Plugin<Project> {
|
||||
pluginManager.apply(SpringMavenPlugin.class);
|
||||
|
||||
new ArtifactoryConventions().apply(project);
|
||||
new JavaConventions().apply(project);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user