Remove classpath index manifest attribute from repackaged war files
Fixes gh-28895
This commit is contained in:
parent
af60a8a7cf
commit
467c092fdc
|
|
@ -29,6 +29,7 @@ import java.util.Map;
|
|||
* @author Dave Syer
|
||||
* @author Andy Wilkinson
|
||||
* @author Madhura Bhave
|
||||
* @author Scott Frederick
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public final class Layouts {
|
||||
|
|
@ -160,11 +161,6 @@ public final class Layouts {
|
|||
return "WEB-INF/classes/";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClasspathIndexFileLocation() {
|
||||
return "WEB-INF/classpath.idx";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLayersIndexFileLocation() {
|
||||
return "WEB-INF/layers.idx";
|
||||
|
|
|
|||
|
|
@ -510,15 +510,15 @@ public abstract class Packager {
|
|||
writtenPaths.add(path);
|
||||
}
|
||||
}
|
||||
if (getLayout() instanceof RepackagingLayout) {
|
||||
writeClasspathIndex(writtenPaths, (RepackagingLayout) getLayout(), writer);
|
||||
}
|
||||
writeClasspathIndexIfNecessary(writtenPaths, getLayout(), writer);
|
||||
}
|
||||
|
||||
private void writeClasspathIndex(List<String> paths, RepackagingLayout layout, AbstractJarWriter writer)
|
||||
private void writeClasspathIndexIfNecessary(List<String> paths, Layout layout, AbstractJarWriter writer)
|
||||
throws IOException {
|
||||
List<String> names = paths.stream().map((path) -> "- \"" + path + "\"").collect(Collectors.toList());
|
||||
writer.writeIndexFile(layout.getClasspathIndexFileLocation(), names);
|
||||
if (layout.getClasspathIndexFileLocation() != null) {
|
||||
List<String> names = paths.stream().map((path) -> "- \"" + path + "\"").collect(Collectors.toList());
|
||||
writer.writeIndexFile(layout.getClasspathIndexFileLocation(), names);
|
||||
}
|
||||
}
|
||||
|
||||
private class PackagedLibrariesUnpackHandler implements UnpackHandler {
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ import static org.assertj.core.api.Assertions.contentOf;
|
|||
* Base class for archive (jar or war) related Maven plugin integration tests.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
abstract class AbstractArchiveIntegrationTests {
|
||||
|
||||
|
|
@ -201,6 +202,11 @@ abstract class AbstractArchiveIntegrationTests {
|
|||
return this;
|
||||
}
|
||||
|
||||
ManifestAssert doesNotHaveAttribute(String name) {
|
||||
assertThat(this.actual.getMainAttributes().getValue(name)).isNull();
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Madhura Bhave
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
@ExtendWith(MavenBuildExtension.class)
|
||||
class JarIntegrationTests extends AbstractArchiveIntegrationTests {
|
||||
|
|
@ -363,6 +364,16 @@ class JarIntegrationTests extends AbstractArchiveIntegrationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void repackagedJarContainsClasspathIndex(MavenBuild mavenBuild) {
|
||||
mavenBuild.project("jar").execute((project) -> {
|
||||
File repackaged = new File(project, "target/jar-0.0.1.BUILD-SNAPSHOT.jar");
|
||||
assertThat(jar(repackaged)).manifest(
|
||||
(manifest) -> manifest.hasAttribute("Spring-Boot-Classpath-Index", "BOOT-INF/classpath.idx"));
|
||||
assertThat(jar(repackaged)).hasEntryWithName("BOOT-INF/classpath.idx");
|
||||
});
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void whenJarIsRepackagedWithOutputTimestampConfiguredThenJarIsReproducible(MavenBuild mavenBuild)
|
||||
throws InterruptedException {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
* Integration tests for the Maven plugin's war support.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
@ExtendWith(MavenBuildExtension.class)
|
||||
class WarIntegrationTests extends AbstractArchiveIntegrationTests {
|
||||
|
|
@ -190,6 +191,16 @@ class WarIntegrationTests extends AbstractArchiveIntegrationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void repackagedWarDoesNotContainClasspathIndex(MavenBuild mavenBuild) {
|
||||
mavenBuild.project("war").execute((project) -> {
|
||||
File repackaged = new File(project, "target/war-0.0.1.BUILD-SNAPSHOT.war");
|
||||
assertThat(jar(repackaged))
|
||||
.manifest((manifest) -> manifest.doesNotHaveAttribute("Spring-Boot-Classpath-Index"));
|
||||
assertThat(jar(repackaged)).doesNotHaveEntryWithName("BOOT-INF/classpath.idx");
|
||||
});
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void whenEntryIsExcludedItShouldNotBePresentInTheRepackagedWar(MavenBuild mavenBuild) {
|
||||
mavenBuild.project("war-exclude-entry").execute((project) -> {
|
||||
|
|
|
|||
Loading…
Reference in New Issue