Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@

import org.codehaus.plexus.archiver.manager.ArchiverManager;
import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
import org.codehaus.plexus.archiver.manager.ServiceLoaderArchiverManager;
import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributeUtils;
import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes;
import org.codehaus.plexus.components.io.attributes.SimpleResourceAttributes;
Expand Down Expand Up @@ -131,6 +132,12 @@ protected Logger getLogger() {
@Inject
private Provider<ArchiverManager> archiverManagerProvider;

/**
* Used instead of {@link #archiverManagerProvider} when this archiver was not created by a JSR-330 container,
* for example through {@link ServiceLoaderArchiverManager} or its constructor.
*/
private ArchiverManager serviceLoaderArchiverManager;

private static class AddedResourceCollection {

private final PlexusIoResourceCollection resources;
Expand Down Expand Up @@ -580,13 +587,23 @@ public void setDestFile(final File destFile) {
}
}

private ArchiverManager getArchiverManager() {
if (archiverManagerProvider != null) {
return archiverManagerProvider.get();
}
if (serviceLoaderArchiverManager == null) {
serviceLoaderArchiverManager = new ServiceLoaderArchiverManager();
}
return serviceLoaderArchiverManager;
}

protected PlexusIoResourceCollection asResourceCollection(final ArchivedFileSet fileSet, Charset charset)
throws ArchiverException {
final File archiveFile = fileSet.getArchive();

final PlexusIoResourceCollection resources;
try {
resources = archiverManagerProvider.get().getResourceCollection(archiveFile);
resources = getArchiverManager().getResourceCollection(archiveFile);
} catch (final NoSuchArchiverException e) {
throw new ArchiverException(
"Error adding archived file-set. PlexusIoResourceCollection not found for: " + archiveFile, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,12 @@
import java.io.File;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.UnArchiver;
import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet;
import org.codehaus.plexus.archiver.util.DefaultFileSet;
import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection;
import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection;
Expand Down Expand Up @@ -134,6 +137,21 @@ void reuseArchiver(@TempDir File tempDir) throws Exception {
assertFalse(newArchiver.getResources().hasNext());
}

@Test
void archiverAddsArchivedFileSetWithoutContainer(@TempDir File tempDir) throws Exception {
ArchiverManager manager = new ServiceLoaderArchiverManager();
File archiveFile = new File(tempDir, "repacked.zip");

Archiver archiver = manager.getArchiver("zip");
archiver.setDestFile(archiveFile);
archiver.addArchivedFileSet(DefaultArchivedFileSet.archivedFileSet(new File("src/test/resources/test.zip")));
archiver.createArchive();

try (ZipFile zipFile = new ZipFile(archiveFile)) {
assertThat(zipFile.stream().map(ZipEntry::getName)).anyMatch(name -> name.endsWith("ZipUnArchiver.java"));
}
}

@Test
void allArchiversShouldBeUnderTest() {
ArchiverManager manager = new ServiceLoaderArchiverManager();
Expand Down
Loading