Omit libraries with null destination when repackaging

Closes gh-12437
This commit is contained in:
Andy Wilkinson 2018-03-12 13:31:16 +00:00
parent 7f9ab8078f
commit 6d16c5ff6e
2 changed files with 25 additions and 7 deletions

View File

@ -423,13 +423,14 @@ public class Repackager {
libraries.doWithLibraries((library) -> {
if (isZip(library.getFile())) {
String libraryDestination = Repackager.this.layout
.getLibraryDestination(library.getName(), library.getScope())
+ library.getName();
Library existing = this.libraryEntryNames
.putIfAbsent(libraryDestination, library);
if (existing != null) {
throw new IllegalStateException(
"Duplicate library " + library.getName());
.getLibraryDestination(library.getName(), library.getScope());
if (libraryDestination != null) {
Library existing = this.libraryEntryNames.putIfAbsent(
libraryDestination + library.getName(), library);
if (existing != null) {
throw new IllegalStateException(
"Duplicate library " + library.getName());
}
}
}
});

View File

@ -621,6 +621,23 @@ public class RepackagerTests {
assertThat(unpackLibrary.getComment()).startsWith("UNPACK:");
}
@Test
public void layoutCanOmitLibraries() throws IOException {
TestJarFile libJar = new TestJarFile(this.temporaryFolder);
libJar.addClass("a/b/C.class", ClassWithoutMainMethod.class);
final File libJarFile = libJar.getFile();
this.testJarFile.addClass("a/b/C.class", ClassWithMainMethod.class);
File file = this.testJarFile.getFile();
Repackager repackager = new Repackager(file);
Layout layout = mock(Layout.class);
final LibraryScope scope = mock(LibraryScope.class);
repackager.setLayout(layout);
repackager.repackage(
(callback) -> callback.library(new Library(libJarFile, scope)));
assertThat(getEntryNames(file)).containsExactly("META-INF/",
"META-INF/MANIFEST.MF", "a/", "a/b/", "a/b/C.class");
}
private File createLibrary() throws IOException {
TestJarFile library = new TestJarFile(this.temporaryFolder);
library.addClass("com/example/library/Library.class",