Skip to content

Commit

Permalink
Merge pull request #24597 from edwardsre
Browse files Browse the repository at this point in the history
* pr/24597:
  Polish "Handle missing manifest files in JarTypeFilter"
  Handle missing manifest files in JarTypeFilter

Closes gh-24597
  • Loading branch information
snicoll committed Dec 23, 2020
2 parents e8a936d + 4cdfd6f commit 5fa5b62
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 5 deletions.
Expand Up @@ -20,8 +20,10 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

import org.apache.maven.artifact.Artifact;

Expand All @@ -43,8 +45,9 @@ class JarTypeFilter extends DependencyFilter {
@Override
protected boolean filter(Artifact artifact) {
try (JarFile jarFile = new JarFile(artifact.getFile())) {
String jarType = jarFile.getManifest().getMainAttributes().getValue("Spring-Boot-Jar-Type");
return jarType != null && EXCLUDED_JAR_TYPES.contains(jarType);
return Optional.ofNullable(jarFile.getManifest()).map(Manifest::getMainAttributes)
.map((attributes) -> attributes.getValue("Spring-Boot-Jar-Type")).map(EXCLUDED_JAR_TYPES::contains)
.orElse(Boolean.FALSE);
}
catch (IOException ex) {
return false;
Expand Down
Expand Up @@ -60,19 +60,39 @@ void whenArtifactHasAnnotationProcessorJarTypeThenItIsExcluded() {
assertThat(new JarTypeFilter().filter(createArtifact("annotation-processor"))).isTrue();
}

private Artifact createArtifact(String jarType) {
@Test
void whenArtifactHasNoManifestFileThenItIsIncluded() {
assertThat(new JarTypeFilter().filter(createArtifactWithNoManifest())).isFalse();
}

private Artifact createArtifact(String springBootJarType) {
Path jarPath = this.temp.resolve("test.jar");
Manifest manifest = new Manifest();
manifest.getMainAttributes().putValue("Manifest-Version", "1.0");
if (jarType != null) {
manifest.getMainAttributes().putValue("Spring-Boot-Jar-Type", jarType);
if (springBootJarType != null) {
manifest.getMainAttributes().putValue("Spring-Boot-Jar-Type", springBootJarType);
}
try {
new JarOutputStream(new FileOutputStream(jarPath.toFile()), manifest).close();
}
catch (IOException ex) {
throw new RuntimeException(ex);
}
return mockArtifact(jarPath);
}

private Artifact createArtifactWithNoManifest() {
Path jarPath = this.temp.resolve("test.jar");
try {
new JarOutputStream(new FileOutputStream(jarPath.toFile())).close();
}
catch (IOException ex) {
throw new RuntimeException(ex);
}
return mockArtifact(jarPath);
}

private Artifact mockArtifact(Path jarPath) {
Artifact artifact = mock(Artifact.class);
given(artifact.getFile()).willReturn(jarPath.toFile());
return artifact;
Expand Down

0 comments on commit 5fa5b62

Please sign in to comment.