diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 902e6b8bb..26ff93d83 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -31,10 +31,6 @@ jobs: [ {"jdk": "17.0.2", "os": "windows-latest", distribution: "zulu" } ] - matrix-exclude: > - [ - {"jdk": "8"} - ] # deploy: # name: Deploy diff --git a/pom.xml b/pom.xml index e9efab7d4..e76a41872 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,6 @@ - 17 2.0.20 1.1.0 2026-06-08T20:12:28Z @@ -210,4 +209,110 @@ + + + java17 + + [17,) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + java17-main + + compile + + + 17 + + ${project.basedir}/src/main/java17 + + true + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + compile-java17-integration-tests + + run + + pre-integration-test + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + ${project.build.directory}/${project.build.finalName}.jar + ${project.build.directory}/it-classes + true + + **/*IT.class + + + + + + integration-test + verify + + + + + + + + + plexus-release + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.5.0 + + + enforce-java-17-for-release + + enforce + + + + + [17,) + To release this MultiRelease jar, use at least Java 17 + + + + + + + + + + diff --git a/src/test/java/org/codehaus/plexus/archiver/manager/CdiFactoryTest.java b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java similarity index 59% rename from src/test/java/org/codehaus/plexus/archiver/manager/CdiFactoryTest.java rename to src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java index 82cb3f6b3..5f4a6229b 100644 --- a/src/test/java/org/codehaus/plexus/archiver/manager/CdiFactoryTest.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java @@ -19,49 +19,36 @@ import java.nio.file.Path; +import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.archiver.zip.PlexusArchiverZipFileResourceCollection; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.archiver.zip.ZipUnArchiver; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; -class CdiFactoryTest { +class CdiFactoryIT { @Test void createsConfiguredArchivers(@TempDir Path directory) { CdiArchiverFactory factory = new CdiArchiverFactory(ZipArchiver::new); - var first = factory.create(configurer -> configurer.setDestFile(directory.resolve("first.zip"))); - var second = factory.create(configurer -> configurer.setDestFile(directory.resolve("second.zip"))); + var first = factory.create(directory.resolve("first.zip"), configurer -> {}); + var second = factory.create(directory.resolve("second.zip"), configurer -> {}); assertThat(first).isNotSameAs(second); assertThat(first.getDestFile()).isEqualTo(directory.resolve("first.zip").toFile()); - assertThat(second.getDestFile()) - .isEqualTo(directory.resolve("second.zip").toFile()); + assertThat(second.getDestFile()).isEqualTo(directory.resolve("second.zip").toFile()); } @Test void createsConfiguredUnarchivers(@TempDir Path directory) { CdiUnArchiverFactory factory = new CdiUnArchiverFactory(ZipUnArchiver::new); - var unarchiver = factory.create(configurer -> configurer.setSource(directory.resolve("source.zip"))); + var unarchiver = factory.create(directory.resolve("source.zip"), c -> {}); assertThat(unarchiver.getSourceFile()) .isEqualTo(directory.resolve("source.zip").toFile()); } - - @Test - void createsConfiguredResourceCollections(@TempDir Path directory) { - CdiPlexusIoResourceCollectionFactory factory = - new CdiPlexusIoResourceCollectionFactory(PlexusArchiverZipFileResourceCollection::new); - - var collection = (AbstractPlexusIoArchiveResourceCollection) - factory.create(configurer -> configurer.setSource(directory.resolve("source.zip"))); - - assertThat(collection.getFile()) - .isEqualTo(directory.resolve("source.zip").toFile()); - } } diff --git a/src/test/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerTest.java b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java similarity index 90% rename from src/test/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerTest.java rename to src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java index 0f7ffc0cd..e2c3b994f 100644 --- a/src/test/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerTest.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java @@ -41,6 +41,7 @@ package org.codehaus.plexus.archiver.manager; import java.io.File; +import java.nio.file.Path; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.ZipEntry; @@ -50,6 +51,7 @@ import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; import org.junit.jupiter.api.Test; @@ -68,7 +70,7 @@ *This is a copy of ArchiverManager, but without the {@code extends TestSupport} and always using * {@code SpiArchiverManager} as the ArchiverManager */ -class ServiceLoaderArchiverManagerTest { +class ServiceLoaderArchiverManagerIT { // list of items which support Archiver and UnArchiver private static Stream getArchiversAndUnArchiverForTests() { @@ -205,30 +207,22 @@ void lookupResourceCollection(String resourceName) throws Exception { } @Test - void configuredLookups(@TempDir File tempDirectory) throws Exception { + void configuredLookups(@TempDir Path tempDirectory) throws Exception { ArchiverManager manager = new ServiceLoaderArchiverManager(); - File archiveFile = new File(tempDirectory, "archive.zip"); - File outputDirectory = new File(tempDirectory, "output"); + Path archiveFile = tempDirectory.resolve("archive.zip"); + Path outputDirectory = tempDirectory.resolve("output"); ArchiverFactory archiverFactory = manager.getArchiverFactory("zip"); - Archiver archiver = archiverFactory.create(configurer -> configurer.setDestFile(archiveFile.toPath())); - Archiver secondArchiver = archiverFactory.create(configurer -> {}); - UnArchiver unarchiver = manager.getUnArchiverFactory(archiveFile).create(configurer -> { - configurer.setSource(archiveFile.toPath()); - configurer.setDestinationDirectory(outputDirectory.toPath()); + Archiver archiver = archiverFactory.create(archiveFile, configurer -> {}); + Archiver secondArchiver = archiverFactory.create(archiveFile, configurer -> {}); + UnArchiver unarchiver = manager.createUnArchiver(archiveFile, configurer -> { + configurer.setDestinationDirectory(outputDirectory); }); - AbstractPlexusIoArchiveResourceCollection resourceCollection = (AbstractPlexusIoArchiveResourceCollection) - manager.getResourceCollectionFactory(archiveFile).create(configurer -> { - configurer.setSource(archiveFile.toPath()); - configurer.setPrefix("content/"); - }); - assertThat(archiver.getDestFile()).isEqualTo(archiveFile); + assertThat(archiver.getDestFile()).isEqualTo(archiveFile.toFile()); assertThat(secondArchiver).isNotSameAs(archiver); - assertThat(unarchiver.getSourceFile()).isEqualTo(archiveFile); - assertThat(unarchiver.getDestDirectory()).isEqualTo(outputDirectory); - assertThat(resourceCollection.getFile()).isEqualTo(archiveFile); - assertThat(resourceCollection.getPrefix()).isEqualTo("content/"); + assertThat(unarchiver.getSourceFile()).isEqualTo(archiveFile.toFile()); + assertThat(unarchiver.getDestDirectory()).isEqualTo(outputDirectory.toFile()); } @Test diff --git a/src/test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java similarity index 55% rename from src/test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java rename to src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index fab311a20..b911cff59 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.lang.reflect.Modifier; import java.nio.file.Path; @@ -27,18 +27,29 @@ import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.CaseSensitivities; -import org.codehaus.plexus.archiver.CaseSensitivity; -import org.codehaus.plexus.archiver.DefaultExcludes; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; import org.codehaus.plexus.archiver.FileSet; import org.codehaus.plexus.archiver.diags.NoOpArchiver; +import org.codehaus.plexus.archivers.config.ArchiveCreation; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.CaseSensitivities; +import org.codehaus.plexus.archivers.config.CaseSensitivity; +import org.codehaus.plexus.archivers.config.DirectoryMode; +import org.codehaus.plexus.archivers.config.DuplicateHandling; +import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.PermissionHandling; +import org.codehaus.plexus.archivers.config.FileMode; +import org.codehaus.plexus.archivers.config.FilePermissions; +import org.codehaus.plexus.archivers.config.PathPatternMatcher; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archivers.config.StandardExcludes; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.ArchiverProvider; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; -class ArchiverProviderTest { +class ArchiverProviderIT { @Test void doesNotExposeUnconfiguredArchiverCreation() { @@ -51,30 +62,48 @@ void doesNotExposeUnconfiguredArchiverCreation() { .doesNotContain("create"); assertThat(Arrays.stream(ArchiverConfigurer.class.getMethods()) .filter(method -> Modifier.isStatic(method.getModifiers()))) - .isEmpty(); + .satisfiesExactly(m -> { + assertThat(m.getName()).isEqualTo("of"); + assertThat(m.getParameterCount()).isEqualTo(1); + assertThat(m.getParameterTypes()[0]).isEqualTo(Archiver.class); + assertThat(m.getReturnType()).isEqualTo(ArchiverConfigurer.class); + }); } @Test void configuresNewArchiverWithoutExposingFileSetImplementations(@TempDir Path directory) { CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - - Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.of(directory) - .prefixed("content/") - .including(List.of("**/*.txt")) - .excluding(List.of("**/ignored.txt")) - .caseSensitive(CaseSensitivity.INSENSITIVE) - .usingDefaultExcludes(DefaultExcludes.IGNORE) - .emptyDirectories(EmptyDirectoryHandling.EXCLUDE))); + + Archiver actual = provider.newArchiver(configurer -> configurer + .resource(ResourceScan.fromDirectory(directory).matcher(PathPatternMatcher + .includes("**/*.txt") + .excludes("**/ignored.txt") + .caseSensitive(CaseSensitivity.INSENSITIVE) + .standardExcludes(StandardExcludes.NONE)), + emit -> { + emit.prefix("content/"); + emit.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); + })); + +// Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.fromDirectory(directory) +// .prefix("content/") +// .includes(List.of("**/*.txt")) +// .excludes(List.of("**/ignored.txt")) +// .caseSensitive(CaseSensitivity.INSENSITIVE) +// .defaultExcludes(DefaultExcludes.IGNORE) +// .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) +// .build())); assertThat(actual).isSameAs(expected); - assertThat(expected.fileSet.getDirectory()).isEqualTo(directory.toFile()); - assertThat(expected.fileSet.getPrefix()).isEqualTo("content/"); - assertThat(expected.fileSet.getIncludes()).containsExactly("**/*.txt"); - assertThat(expected.fileSet.getExcludes()).containsExactly("**/ignored.txt"); - assertThat(expected.fileSet.isCaseSensitive()).isFalse(); - assertThat(expected.fileSet.isUsingDefaultExcludes()).isFalse(); - assertThat(expected.fileSet.isIncludingEmptyDirectories()).isFalse(); + + assertThat(expected.fileSet.getDirectory()).as("getDirectory").isEqualTo(directory.toFile()); + assertThat(expected.fileSet.getPrefix()).as("getPrefix").isEqualTo("content/"); + assertThat(expected.fileSet.getIncludes()).as("getIncludes").containsExactly("**/*.txt"); + assertThat(expected.fileSet.getExcludes()).as("getExcludes").containsExactly("**/ignored.txt"); + assertThat(expected.fileSet.isCaseSensitive()).as("isCaseSensitive").isFalse(); + assertThat(expected.fileSet.isUsingDefaultExcludes()).as("isUsingDefaultExcludes").isFalse(); + assertThat(expected.fileSet.isIncludingEmptyDirectories()).as("isIncludingEmptyDirectories").isFalse(); } @Test @@ -83,22 +112,34 @@ void configuresArchivedFileSet(@TempDir Path directory) { CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.of(archive) - .prefixed("lib/") - .including(List.of("**/*.class")) - .excluding(List.of("module-info.class")) - .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) - .usingDefaultExcludes(DefaultExcludes.IGNORE) - .emptyDirectories(EmptyDirectoryHandling.EXCLUDE))); - - assertThat(expected.archivedFileSet.getArchive()).isEqualTo(archive.toFile()); - assertThat(expected.archivedFileSet.getPrefix()).isEqualTo("lib/"); - assertThat(expected.archivedFileSet.getIncludes()).containsExactly("**/*.class"); - assertThat(expected.archivedFileSet.getExcludes()).containsExactly("module-info.class"); - assertThat(expected.archivedFileSet.isCaseSensitive()) + Archiver actual = provider.newArchiver(configurer -> configurer + .resource(ResourceScan.fromArchive(archive).matcher(PathPatternMatcher + .includes("**/*.class") + .excludes("module-info.class") + .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) + .standardExcludes(StandardExcludes.NONE)), + emit -> { + emit.prefix("lib/"); + emit.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); + })); + +// provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.fromArchive(archive) +// .prefix("lib/") +// .includes(List.of("**/*.class")) +// .excludes(List.of("module-info.class")) +// .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) +// .defaultExcludes(DefaultExcludes.IGNORE) +// .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) +// .build())); + + assertThat(expected.archivedFileSet.getArchive()).as("getArchive").isEqualTo(archive.toFile()); + assertThat(expected.archivedFileSet.getPrefix()).as("getPrefix").isEqualTo("lib/"); + assertThat(expected.archivedFileSet.getIncludes()).as("getIncludes").containsExactly("**/*.class"); + assertThat(expected.archivedFileSet.getExcludes()).as("getExcludes").containsExactly("module-info.class"); + assertThat(expected.archivedFileSet.isCaseSensitive()).as("isCaseSensitive") .isEqualTo(CaseSensitivities.resolve(CaseSensitivity.PLATFORM_DEFAULT)); - assertThat(expected.archivedFileSet.isUsingDefaultExcludes()).isFalse(); - assertThat(expected.archivedFileSet.isIncludingEmptyDirectories()).isFalse(); + assertThat(expected.archivedFileSet.isUsingDefaultExcludes()).as("isUsingDefaultExcludes").isFalse(); + assertThat(expected.archivedFileSet.isIncludingEmptyDirectories()).as("isIncludingEmptyDirectories").isFalse(); } @Test @@ -108,23 +149,22 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { Archiver actual = providerFor(expected).newArchiver(configurer -> { configurer.setDestFile(directory.resolve("archive.zip")); - configurer.setFileMode(UnixPermissions.of(PosixFilePermissions.fromString("rw-r--r--"))); - configurer.setDefaultFileMode(UnixPermissions.of(PosixFilePermissions.fromString("rw-r-----"))); - configurer.setDirectoryMode(UnixPermissions.of(PosixFilePermissions.fromString("rwxr-xr-x"))); - configurer.setDefaultDirectoryMode(UnixPermissions.of(PosixFilePermissions.fromString("rwxr-x---"))); + configurer.setFileMode(FileMode.override(FilePermissions.parse("rw-r--r--"))); + configurer.setDirectoryMode(DirectoryMode.override(FilePermissions.parse("rwxr-xr-x"))); configurer.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); configurer.setDotFileDirectory(directory); configurer.setForced(ArchiveCreation.WHEN_NEEDED); configurer.setDuplicateBehavior(DuplicateHandling.FAIL); configurer.setIgnorePermissions(PermissionHandling.IGNORE); - configurer.setLastModifiedTime(timestamp); - configurer.setFilenameComparator(Comparator.naturalOrder()); - configurer.setOverrideUid(1000); - configurer.setOverrideUserName("user"); - configurer.setOverrideGid(1000); - configurer.setOverrideGroupName("group"); - configurer.setUmask(UnixPermissions.of(PosixFilePermissions.fromString("----w--w-"))); - configurer.configureReproducibleBuild(timestamp); + configurer.setUmask(FilePermissions.parse("----w--w-")); + configurer.configureReproducibleBuild(c -> { + c.setDefaultLastModifiedTime(timestamp); + c.setDefaultUid(1000); + c.setDefaultUserName("user"); + c.setDefaultGid(1000); + c.setDefaultGroupName("group"); + c.setFilenameComparator(Comparator.naturalOrder()); + }); }); assertThat(actual).isSameAs(expected); @@ -132,9 +172,7 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { assertThat(expected.forced).isFalse(); assertThat(expected.ignorePermissions).isTrue(); assertThat(expected.fileMode).isEqualTo(0644); - assertThat(expected.defaultFileMode).isEqualTo(0640); assertThat(expected.directoryMode).isEqualTo(0755); - assertThat(expected.defaultDirectoryMode).isEqualTo(0750); assertThat(expected.duplicateBehavior).isEqualTo(Archiver.DUPLICATES_FAIL); assertThat(expected.umask).isEqualTo(0022); } diff --git a/src/test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java b/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java similarity index 78% rename from src/test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java rename to src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java index 0575e0895..bd4936c6a 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.lang.reflect.Modifier; import java.nio.file.Path; @@ -24,25 +24,35 @@ import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.zip.ZipUnArchiverProvider; +import org.codehaus.plexus.archivers.config.ExistingFileHandling; +import org.codehaus.plexus.archivers.config.PermissionHandling; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.UnArchiverProvider; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; -class UnArchiverProviderTest { +class UnArchiverProviderIT { @Test void exposesOnlyConfiguredCreation() { assertThat(UnArchiverProvider.class.getPermittedSubclasses()).containsExactly(AbstractUnArchiverProvider.class); assertThat(Arrays.stream(UnArchiverProvider.class.getMethods()) - .filter(method -> method.getName().equals("newUnarchiver")) + .filter(method -> method.getName().equals("newUnArchiver")) .map(method -> method.getParameterCount())) .containsExactly(1); assertThat(Arrays.stream(AbstractUnArchiverProvider.class.getMethods()).map(method -> method.getName())) .doesNotContain("create"); assertThat(Arrays.stream(UnArchiverConfigurer.class.getMethods()) .filter(method -> Modifier.isStatic(method.getModifiers()))) - .isEmpty(); + .satisfiesExactly(m -> { + assertThat(m.getName()).isEqualTo("of"); + assertThat(m.getParameterCount()).isEqualTo(1); + assertThat(m.getParameterTypes()[0]).isEqualTo(UnArchiver.class); + assertThat(m.getReturnType()).isEqualTo(UnArchiverConfigurer.class); + }); } @Test @@ -50,7 +60,7 @@ void configuresUnarchiverBeforeReturningIt(@TempDir Path directory) { Path source = directory.resolve("source.zip"); Path destination = directory.resolve("output"); - UnArchiver unarchiver = new ZipUnArchiverProvider().newUnarchiver(configurer -> { + UnArchiver unarchiver = new ZipUnArchiverProvider().newUnArchiver(configurer -> { configurer.setSource(source); configurer.setDestinationDirectory(destination); configurer.setExistingFileHandling(ExistingFileHandling.KEEP_NEWER); diff --git a/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java b/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java index efce189db..7e6fc000c 100755 --- a/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java @@ -18,7 +18,6 @@ import javax.annotation.Nonnull; import javax.inject.Inject; -import javax.inject.Provider; import java.io.Closeable; import java.io.File; @@ -35,9 +34,8 @@ import java.util.NoSuchElementException; import java.util.Set; -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.archiver.manager.ResourceCollectionRegistry; import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributeUtils; import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes; import org.codehaus.plexus.components.io.attributes.SimpleResourceAttributes; @@ -125,18 +123,7 @@ protected Logger getLogger() { */ private String overrideGroupName; - /** - * Injected: Allows us to pull the ArchiverManager instance out of the container without causing a chicken-and-egg - * instantiation/composition problem. - */ - @Inject - private Provider 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 ResourceCollectionRegistry resourceCollectionRegistry; private static class AddedResourceCollection { @@ -166,6 +153,11 @@ private int maybeOverridden(int suggestedMode, boolean isDir) { */ private boolean ignorePermissions = false; + @Inject + public void setResourceCollectionRegistry(ResourceCollectionRegistry resourceCollectionRegistry) { + this.resourceCollectionRegistry = resourceCollectionRegistry; + } + @Override public String getDuplicateBehavior() { return duplicateBehavior; @@ -402,7 +394,8 @@ private ArchiveEntry asArchiveEntry(final AddedResourceCollection collection, fi final String destFileName = collection.resources.getName(resource); int fromResource = PlexusIoResourceAttributes.UNKNOWN_OCTAL_MODE; - if (resource instanceof ResourceAttributeSupplier supplier) { + if (resource instanceof ResourceAttributeSupplier) { + ResourceAttributeSupplier supplier = (ResourceAttributeSupplier) resource; final PlexusIoResourceAttributes attrs = supplier.getAttributes(); if (attrs != null) { @@ -473,9 +466,10 @@ public boolean hasNext() { if (ioResourceIter == null) { if (addedResourceIter.hasNext()) { final Object o = addedResourceIter.next(); - if (o instanceof ArchiveEntry entry) { - nextEntry = entry; - } else if (o instanceof AddedResourceCollection collection) { + if (o instanceof ArchiveEntry) { + nextEntry = (ArchiveEntry) o; + } else if (o instanceof AddedResourceCollection) { + AddedResourceCollection collection = (AddedResourceCollection) o; currentResourceCollection = collection; try { @@ -560,8 +554,8 @@ private String normalizedForDuplicateCheck(ArchiveEntry entry) { } private static void closeIfCloseable(Object resource) throws IOException { - if (resource instanceof Closeable closeable) { - closeable.close(); + if (resource instanceof Closeable) { + ((Closeable) resource).close(); } } @@ -587,41 +581,31 @@ 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 = getArchiverManager().getResourceCollection(archiveFile); + resources = resourceCollectionRegistry.getResourceCollection(archiveFile); } catch (final NoSuchArchiverException e) { throw new ArchiverException( "Error adding archived file-set. PlexusIoResourceCollection not found for: " + archiveFile, e); } - if (resources instanceof EncodingSupported supported) { - supported.setEncoding(charset); + if (resources instanceof EncodingSupported) { + ((EncodingSupported) resources).setEncoding(charset); } - if (resources instanceof PlexusIoArchivedResourceCollection collection) { - collection.setFile(fileSet.getArchive()); + if (resources instanceof PlexusIoArchivedResourceCollection) { + ((PlexusIoArchivedResourceCollection) resources).setFile(fileSet.getArchive()); } else { throw new ArchiverException("Expected " + PlexusIoArchivedResourceCollection.class.getName() + ", got " + resources.getClass().getName()); } - if (resources instanceof AbstractPlexusIoResourceCollection collection1) { - collection1.setStreamTransformer(fileSet.getStreamTransformer()); + if (resources instanceof AbstractPlexusIoResourceCollection) { + ((AbstractPlexusIoResourceCollection) resources).setStreamTransformer(fileSet.getStreamTransformer()); } final PlexusIoProxyResourceCollection proxy = new PlexusIoProxyResourceCollection(resources); @@ -716,9 +700,10 @@ protected boolean isUptodate() throws ArchiverException { while (it.hasNext()) { final Object o = it.next(); final long l; - if (o instanceof ArchiveEntry entry) { - l = entry.getResource().getLastModified(); - } else if (o instanceof AddedResourceCollection collection) { + if (o instanceof ArchiveEntry) { + l = ((ArchiveEntry) o).getResource().getLastModified(); + } else if (o instanceof AddedResourceCollection) { + AddedResourceCollection collection = (AddedResourceCollection) o; try { l = collection.resources.getLastModified(); } catch (final IOException e) { @@ -844,8 +829,8 @@ protected void postCreateArchive() throws ArchiverException, IOException {} protected abstract String getArchiveType(); private void addCloseable(Object maybeCloseable) { - if (maybeCloseable instanceof Closeable closeable) { - closeables.add(closeable); + if (maybeCloseable instanceof Closeable) { + closeables.add((Closeable) maybeCloseable); } } @@ -861,8 +846,8 @@ protected void cleanUp() throws IOException { closeIterators(); for (Object resource : resources) { - if (resource instanceof PlexusIoProxyResourceCollection collection) { - resource = collection.getSrc(); + if (resource instanceof PlexusIoProxyResourceCollection) { + resource = ((PlexusIoProxyResourceCollection) resource).getSrc(); } closeIfCloseable(resource); diff --git a/src/main/java/org/codehaus/plexus/archiver/ArchiveEntry.java b/src/main/java/org/codehaus/plexus/archiver/ArchiveEntry.java index 21637e420..e8fd65f88 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ArchiveEntry.java +++ b/src/main/java/org/codehaus/plexus/archiver/ArchiveEntry.java @@ -78,7 +78,9 @@ private ArchiveEntry( this.name = name; this.defaultDirMode = defaultDirMode; this.resource = collection != null ? collection.resolve(resource) : resource; - this.attributes = (resource instanceof ResourceAttributeSupplier ras) ? ras.getAttributes() : null; + this.attributes = resource instanceof ResourceAttributeSupplier + ? ((ResourceAttributeSupplier) resource).getAttributes() + : null; this.type = type; int permissions = mode; @@ -117,8 +119,8 @@ public String getName() { */ @Deprecated public File getFile() { - if (resource instanceof PlexusIoFileResource fileResource) { - return fileResource.getFile(); + if (resource instanceof PlexusIoFileResource) { + return ((PlexusIoFileResource) resource).getFile(); } return null; } diff --git a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java index da677bf93..8f2101f6e 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -3,7 +3,6 @@ import javax.annotation.CheckForNull; import java.io.File; -import java.nio.file.Path; /** * A file set, which consists of the files and directories in @@ -13,17 +12,6 @@ */ public interface ArchivedFileSet extends BaseFileSet { - /** - * Creates a fluent archived file set specification. - * - * @param archive the source archive - * @return a file set for the archive - * @since 5.0.0 - */ - static ArchivedFileSetSpec of(Path archive) { - return ArchivedFileSetSpec.of(archive); - } - /** * Returns the archive file. */ diff --git a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java b/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java deleted file mode 100644 index ede58a918..000000000 --- a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archiver; - -import java.nio.file.Path; -import java.util.List; -import java.util.Objects; - -import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; -import org.codehaus.plexus.components.io.filemappers.FileMapper; -import org.codehaus.plexus.components.io.fileselectors.FileSelector; -import org.codehaus.plexus.components.io.functions.InputStreamTransformer; - -/** - * Fluent specification of files read from an archive. - * - * @since 5.0.0 - */ -public final class ArchivedFileSetSpec { - private final Path archive; - private String prefix; - private List includes; - private List excludes; - private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; - private DefaultExcludes defaultExcludes = DefaultExcludes.USE; - private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; - private List fileSelectors; - private InputStreamTransformer streamTransformer; - private List fileMappers; - - private ArchivedFileSetSpec(Path archive) { - this.archive = Objects.requireNonNull(archive, "archive"); - } - - static ArchivedFileSetSpec of(Path archive) { - return new ArchivedFileSetSpec(archive); - } - - public ArchivedFileSetSpec prefixed(String prefix) { - this.prefix = prefix; - return this; - } - - public ArchivedFileSetSpec including(List includes) { - this.includes = List.copyOf(includes); - return this; - } - - public ArchivedFileSetSpec excluding(List excludes) { - this.excludes = List.copyOf(excludes); - return this; - } - - public ArchivedFileSetSpec caseSensitive(CaseSensitivity caseSensitivity) { - this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); - return this; - } - - public ArchivedFileSetSpec usingDefaultExcludes(DefaultExcludes defaultExcludes) { - this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); - return this; - } - - public ArchivedFileSetSpec emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { - this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); - return this; - } - - public ArchivedFileSetSpec selectedBy(List fileSelectors) { - this.fileSelectors = List.copyOf(fileSelectors); - return this; - } - - public ArchivedFileSetSpec transformedBy(InputStreamTransformer streamTransformer) { - this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); - return this; - } - - public ArchivedFileSetSpec mappedBy(List fileMappers) { - this.fileMappers = List.copyOf(fileMappers); - return this; - } - - ArchivedFileSet toArchivedFileSet() { - DefaultArchivedFileSet fileSet = new DefaultArchivedFileSet(archive.toFile()); - fileSet.setPrefix(prefix); - fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); - fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); - fileSet.setCaseSensitive(isCaseSensitive()); - fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); - fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); - fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); - if (streamTransformer != null) { - fileSet.setStreamTransformer(streamTransformer); - } - fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); - return fileSet; - } - - private boolean isCaseSensitive() { - return CaseSensitivities.resolve(caseSensitivity); - } - - private boolean usesBuiltInDefaultExcludes() { - return defaultExcludes instanceof BuiltInDefaultExcludes builtIn && builtIn.use; - } - - private boolean includesEmptyDirectories() { - return ((FixedEmptyDirectoryHandling) emptyDirectoryHandling).included; - } -} diff --git a/src/main/java/org/codehaus/plexus/archiver/Archiver.java b/src/main/java/org/codehaus/plexus/archiver/Archiver.java index 32424882d..b26d0a9f3 100644 --- a/src/main/java/org/codehaus/plexus/archiver/Archiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/Archiver.java @@ -76,17 +76,6 @@ public interface Archiver { */ void addFileSet(@Nonnull FileSet fileSet) throws ArchiverException; - /** - * Adds a modern file set specification to the archive. - * - * @param fileSetSpec the file set specification - * @throws ArchiverException if adding the file set failed - * @since 5.0.0 - */ - default void addFileSet(@Nonnull FileSetSpec fileSetSpec) throws ArchiverException { - addFileSet(fileSetSpec.toFileSet()); - } - void addSymlink(String symlinkName, String symlinkDestination) throws ArchiverException; void addSymlink(String symlinkName, int permissions, String symlinkDestination) throws ArchiverException; @@ -97,17 +86,6 @@ default void addFileSet(@Nonnull FileSetSpec fileSetSpec) throws ArchiverExcepti void addArchivedFileSet(ArchivedFileSet fileSet) throws ArchiverException; - /** - * Adds a modern archived file set specification to the archive. - * - * @param fileSetSpec the archived file set specification - * @throws ArchiverException if adding the file set failed - * @since 5.0.0 - */ - default void addArchivedFileSet(@Nonnull ArchivedFileSetSpec fileSetSpec) throws ArchiverException { - addArchivedFileSet(fileSetSpec.toArchivedFileSet()); - } - /** * Adds the given archive file set to the archive. * diff --git a/src/main/java/org/codehaus/plexus/archiver/FileSet.java b/src/main/java/org/codehaus/plexus/archiver/FileSet.java index 02d47e0ea..9f8bf3a32 100644 --- a/src/main/java/org/codehaus/plexus/archiver/FileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/FileSet.java @@ -1,7 +1,6 @@ package org.codehaus.plexus.archiver; import java.io.File; -import java.nio.file.Path; /** * A file set, which consists of the files and directories in @@ -11,17 +10,6 @@ */ public interface FileSet extends BaseFileSet { - /** - * Creates a fluent file set specification. - * - * @param directory the file set base directory - * @return a file set for the directory - * @since 5.0.0 - */ - static FileSetSpec of(Path directory) { - return FileSetSpec.of(directory); - } - /** * Returns the file sets base directory. */ diff --git a/src/main/java/org/codehaus/plexus/archiver/FileSetSpec.java b/src/main/java/org/codehaus/plexus/archiver/FileSetSpec.java deleted file mode 100644 index 39f6d931a..000000000 --- a/src/main/java/org/codehaus/plexus/archiver/FileSetSpec.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archiver; - -import java.nio.file.Path; -import java.util.List; -import java.util.Objects; - -import org.codehaus.plexus.archiver.util.DefaultFileSet; -import org.codehaus.plexus.components.io.filemappers.FileMapper; -import org.codehaus.plexus.components.io.fileselectors.FileSelector; -import org.codehaus.plexus.components.io.functions.InputStreamTransformer; - -/** - * Fluent specification of files rooted at a directory. - * - * @since 5.0.0 - */ -public final class FileSetSpec { - private final Path directory; - private String prefix; - private List includes; - private List excludes; - private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; - private DefaultExcludes defaultExcludes = DefaultExcludes.USE; - private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; - private SymbolicLinkHandling symbolicLinkHandling = SymbolicLinkHandling.PRESERVE; - private List fileSelectors; - private InputStreamTransformer streamTransformer; - private List fileMappers; - - private FileSetSpec(Path directory) { - this.directory = Objects.requireNonNull(directory, "directory"); - } - - static FileSetSpec of(Path directory) { - return new FileSetSpec(directory); - } - - public FileSetSpec prefixed(String prefix) { - this.prefix = prefix; - return this; - } - - public FileSetSpec including(List includes) { - this.includes = List.copyOf(includes); - return this; - } - - public FileSetSpec excluding(List excludes) { - this.excludes = List.copyOf(excludes); - return this; - } - - public FileSetSpec caseSensitive(CaseSensitivity caseSensitivity) { - this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); - return this; - } - - public FileSetSpec usingDefaultExcludes(DefaultExcludes defaultExcludes) { - this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); - return this; - } - - public FileSetSpec emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { - this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); - return this; - } - - public FileSetSpec symbolicLinks(SymbolicLinkHandling symbolicLinkHandling) { - this.symbolicLinkHandling = Objects.requireNonNull(symbolicLinkHandling, "symbolicLinkHandling"); - return this; - } - - public FileSetSpec selectedBy(List fileSelectors) { - this.fileSelectors = List.copyOf(fileSelectors); - return this; - } - - public FileSetSpec transformedBy(InputStreamTransformer streamTransformer) { - this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); - return this; - } - - public FileSetSpec mappedBy(List fileMappers) { - this.fileMappers = List.copyOf(fileMappers); - return this; - } - - FileSet toFileSet() { - DefaultFileSet fileSet = new DefaultFileSet(directory.toFile()); - fileSet.setPrefix(prefix); - fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); - fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); - fileSet.setCaseSensitive(isCaseSensitive()); - fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); - fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); - fileSet.setFollowingSymLinks(followsSymbolicLinks()); - fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); - if (streamTransformer != null) { - fileSet.setStreamTransformer(streamTransformer); - } - fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); - return fileSet; - } - - private boolean isCaseSensitive() { - return CaseSensitivities.resolve(caseSensitivity); - } - - private boolean usesBuiltInDefaultExcludes() { - return defaultExcludes instanceof BuiltInDefaultExcludes builtIn && builtIn.use; - } - - private boolean followsSymbolicLinks() { - return ((FixedSymbolicLinkHandling) symbolicLinkHandling).following; - } - - private boolean includesEmptyDirectories() { - return ((FixedEmptyDirectoryHandling) emptyDirectoryHandling).included; - } -} diff --git a/src/main/java/org/codehaus/plexus/archiver/SymbolicLinkHandling.java b/src/main/java/org/codehaus/plexus/archiver/SymbolicLinkHandling.java deleted file mode 100644 index ba18ad100..000000000 --- a/src/main/java/org/codehaus/plexus/archiver/SymbolicLinkHandling.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archiver; - -/** - * Controls whether symbolic links below a file set's base directory are resolved. - * - * @since 5.0.0 - */ -public sealed interface SymbolicLinkHandling permits FixedSymbolicLinkHandling { - - /** - * Adds a symbolic link as a link. The contents of a linked directory are not scanned. - */ - SymbolicLinkHandling PRESERVE = new FixedSymbolicLinkHandling(false); - - /** - * Adds a symbolic link as the file or directory it points at, including a linked directory's contents. The scan can - * descend into a directory that links back to one of its own ancestors, so use this only for trees known not to - * contain such cycles. - */ - SymbolicLinkHandling FOLLOW = new FixedSymbolicLinkHandling(true); -} - -final class FixedSymbolicLinkHandling implements SymbolicLinkHandling { - final boolean following; - - FixedSymbolicLinkHandling(boolean following) { - this.following = following; - } -} diff --git a/src/main/java/org/codehaus/plexus/archiver/diags/TrackingArchiver.java b/src/main/java/org/codehaus/plexus/archiver/diags/TrackingArchiver.java index 2393ca7da..e2b3e7e59 100644 --- a/src/main/java/org/codehaus/plexus/archiver/diags/TrackingArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/diags/TrackingArchiver.java @@ -226,15 +226,16 @@ public Addition( final String[] excludes, final int permissions) { this.resource = resource; - if (resource instanceof FileSet fs) { - directory = fs.getDirectory(); - this.destination = fs.getPrefix(); - this.includes = fs.getIncludes(); - this.excludes = fs.getExcludes(); + if (resource instanceof FileSet) { + FileSet fileSet = (FileSet) resource; + directory = fileSet.getDirectory(); + this.destination = fileSet.getPrefix(); + this.includes = fileSet.getIncludes(); + this.excludes = fileSet.getExcludes(); this.permissions = permissions; } else { - if (resource instanceof File file && file.isDirectory()) { - directory = file; + if (resource instanceof File && ((File) resource).isDirectory()) { + directory = (File) resource; } else { directory = null; } diff --git a/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java b/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java index 58c9de709..1034c83c6 100644 --- a/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiver.java @@ -90,8 +90,8 @@ public void execute() throws ArchiverException, IOException { final String destDir = destDirectory.getCanonicalPath(); fileName = destDir + File.separator + fileName; PlexusIoResource resource = f.getResource(); - if (resource instanceof SymlinkDestinationSupplier supplier) { - String dest = supplier.getSymlinkDestination(); + if (resource instanceof SymlinkDestinationSupplier) { + String dest = ((SymlinkDestinationSupplier) resource).getSymlinkDestination(); File target = new File(dest); File symlink = new File(fileName); makeParentDirectories(symlink); diff --git a/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java b/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java index c7b409099..987542991 100644 --- a/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java @@ -21,6 +21,8 @@ import java.io.File; import java.io.IOException; import java.io.PrintStream; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; @@ -35,9 +37,9 @@ import java.util.Enumeration; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.TimeZone; import java.util.regex.Pattern; -import java.util.spi.ToolProvider; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; @@ -72,14 +74,36 @@ public class JarToolModularJarArchiver extends ModularJarArchiver { private static final Pattern MRJAR_VERSION_AREA = Pattern.compile("META-INF/versions/\\d+/"); - private final ToolProvider jarTool; + private final Object jarTool; + + private final Method jarToolRun; private boolean moduleDescriptorFound; private boolean hasJarDateOption; public JarToolModularJarArchiver() { - this.jarTool = ToolProvider.findFirst("jar").orElse(null); + Object tool = null; + Method run = null; + try { + Class toolProvider = Class.forName("java.util.spi.ToolProvider"); + Method findFirst = toolProvider.getMethod("findFirst", String.class); + Optional jarToolProvider = (Optional) findFirst.invoke(null, "jar"); + if (jarToolProvider.isPresent()) { + tool = jarToolProvider.get(); + run = toolProvider.getMethod("run", PrintStream.class, PrintStream.class, String[].class); + } + } catch (ClassNotFoundException e) { + // ToolProvider is not available before Java 9. + } catch (IllegalAccessException e) { + throw new IllegalStateException("Could not access the JDK jar tool", e); + } catch (InvocationTargetException e) { + throw new IllegalStateException("Could not locate the JDK jar tool", e.getCause()); + } catch (NoSuchMethodException e) { + throw new IllegalStateException("Could not access the JDK jar tool", e); + } + this.jarTool = tool; + this.jarToolRun = run; } @Override @@ -117,7 +141,7 @@ protected void postCreateArchive() throws ArchiverException { getLogger().debug("jar tool --date option is supported: " + hasJarDateOption); } - int result = jarTool.run(System.out, System.err, getJarToolArguments()); + int result = runJarTool(System.out, System.err, getJarToolArguments()); if (result != 0) { throw new ArchiverException( @@ -269,14 +293,31 @@ private static FileTime revertToLocalTime(FileTime time) { * * @return true if the JAR tool supports the {@code --date} option */ - private boolean isJarDateOptionSupported() { + private boolean isJarDateOptionSupported() throws ArchiverException { // Test the output code validating the --date option. String[] args = {"--date", "2099-12-31T23:59:59Z", "--version"}; PrintStream nullPrintStream = NullPrintStream.INSTANCE; - int result = jarTool.run(nullPrintStream, nullPrintStream, args); + int result = runJarTool(nullPrintStream, nullPrintStream, args); return result == 0; } + + private int runJarTool(PrintStream out, PrintStream err, String[] args) throws ArchiverException { + try { + return ((Integer) jarToolRun.invoke(jarTool, out, err, args)).intValue(); + } catch (IllegalAccessException e) { + throw new ArchiverException("Could not access the JDK jar tool", e); + } catch (InvocationTargetException e) { + Throwable cause = e.getCause(); + if (cause instanceof RuntimeException) { + throw (RuntimeException) cause; + } + if (cause instanceof Error) { + throw (Error) cause; + } + throw new ArchiverException("Could not invoke the JDK jar tool", cause); + } + } } diff --git a/src/main/java/org/codehaus/plexus/archiver/jar/Manifest.java b/src/main/java/org/codehaus/plexus/archiver/jar/Manifest.java index cc98eace7..db6534fa5 100644 --- a/src/main/java/org/codehaus/plexus/archiver/jar/Manifest.java +++ b/src/main/java/org/codehaus/plexus/archiver/jar/Manifest.java @@ -625,7 +625,8 @@ public int hashCode() { @Override public boolean equals(Object rhs) { - return rhs instanceof ExistingSection es && backingAttributes.equals(es.backingAttributes); + return rhs instanceof ExistingSection + && backingAttributes.equals(((ExistingSection) rhs).backingAttributes); } } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java index ca8e25686..611b7e4d5 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java @@ -21,13 +21,12 @@ import java.io.File; import java.util.Collection; -import java.util.Locale; +import java.util.Collections; import java.util.Map; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; -import org.codehaus.plexus.util.StringUtils; import static java.util.Objects.requireNonNull; @@ -43,15 +42,15 @@ protected AbstractArchiverManager( Map archivers, Map unArchivers, Map plexusIoResourceCollections) { - this.archivers = Map.copyOf(archivers); - this.unArchivers = Map.copyOf(unArchivers); - this.plexusIoResourceCollections = Map.copyOf(plexusIoResourceCollections); + this.archivers = Collections.unmodifiableMap(archivers); + this.unArchivers = Collections.unmodifiableMap(unArchivers); + this.plexusIoResourceCollections = Collections.unmodifiableMap(plexusIoResourceCollections); } @Override @Nonnull public final Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException { - return getArchiverFactory(archiverName).create(configurer -> {}); + return getArchiverFactory(archiverName).create(); } @Override @@ -68,7 +67,7 @@ public final ArchiverFactory getArchiverFactory(@Nonnull String archiverName) th @Override @Nonnull public final UnArchiver getUnArchiver(@Nonnull String unArchiverName) throws NoSuchArchiverException { - return getUnArchiverFactory(unArchiverName).create(configurer -> {}); + return getUnArchiverFactory(unArchiverName).create(); } @Override @@ -86,7 +85,7 @@ public final UnArchiverFactory getUnArchiverFactory(@Nonnull String unArchiverNa @Nonnull public final PlexusIoResourceCollection getResourceCollection(String resourceCollectionName) throws NoSuchArchiverException { - return getResourceCollectionFactory(resourceCollectionName).create(configurer -> {}); + return getResourceCollectionFactory(resourceCollectionName).create(); } @Override @@ -104,13 +103,7 @@ public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(Stri @Override @Nonnull public final Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException { - return getArchiver(getFileExtension(file)); - } - - @Override - @Nonnull - public final ArchiverFactory getArchiverFactory(@Nonnull File file) throws NoSuchArchiverException { - return getArchiverFactory(getFileExtension(file)); + return getArchiver(FileNames.getFileExtension(file)); } @Override @@ -121,13 +114,7 @@ public Collection getAvailableArchivers() { @Override @Nonnull public final UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException { - return getUnArchiver(getFileExtension(file)); - } - - @Override - @Nonnull - public final UnArchiverFactory getUnArchiverFactory(@Nonnull File file) throws NoSuchArchiverException { - return getUnArchiverFactory(getFileExtension(file)); + return getUnArchiver(FileNames.getFileExtension(file)); } @Nonnull @@ -139,14 +126,7 @@ public final Collection getAvailableUnArchivers() { @Override @Nonnull public final PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException { - return getResourceCollection(getFileExtension(file)); - } - - @Override - @Nonnull - public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(@Nonnull File file) - throws NoSuchArchiverException { - return getResourceCollectionFactory(getFileExtension(file)); + return getResourceCollection(FileNames.getFileExtension(file)); } @Nonnull @@ -154,23 +134,4 @@ public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(@Non public final Collection getAvailableResourceCollections() { return plexusIoResourceCollections.keySet(); } - - @Nonnull - private static String getFileExtension(@Nonnull File file) { - - String fileName = file.getName().toLowerCase(Locale.ROOT); - String[] tokens = StringUtils.split(fileName, "."); - - String archiveExt = ""; - - if (tokens.length == 2) { - archiveExt = tokens[1]; - } else if (tokens.length > 2 && "tar".equals(tokens[tokens.length - 2])) { - archiveExt = "tar." + tokens[tokens.length - 1]; - } else if (tokens.length > 2) { - archiveExt = tokens[tokens.length - 1]; - } - - return archiveExt; - } } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/AbstractResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractResourceCollectionRegistry.java new file mode 100644 index 000000000..54f1b8bd0 --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractResourceCollectionRegistry.java @@ -0,0 +1,40 @@ +package org.codehaus.plexus.archiver.manager; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.util.Map; + +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +import static java.util.Objects.requireNonNull; + +abstract class AbstractResourceCollectionRegistry implements ResourceCollectionRegistry { + + private final Map plexusIoResourceCollections; + + protected AbstractResourceCollectionRegistry( + Map plexusIoResourceCollections) { + this.plexusIoResourceCollections = plexusIoResourceCollections; + } + + @Override + public final PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException { + return getResourceCollection(FileNames.getFileExtension(file)); + } + + public final PlexusIoResourceCollection getResourceCollection(String resourceCollectionName) + throws NoSuchArchiverException { + return getResourceCollectionFactory(resourceCollectionName).create(); + } + + public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(String resourceCollectionName) + throws NoSuchArchiverException { + requireNonNull(resourceCollectionName); + PlexusIoResourceCollectionFactory resourceCollection = plexusIoResourceCollections.get(resourceCollectionName); + if (resourceCollection == null) { + throw new NoSuchArchiverException(resourceCollectionName); + } + return resourceCollection; + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverFactory.java b/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverFactory.java index 895c1b895..a03a9ddfb 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverFactory.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverFactory.java @@ -17,10 +17,7 @@ package org.codehaus.plexus.archiver.manager; -import java.util.function.Consumer; - import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.ArchiverConfigurer; /** * Creates configured archiver instances. @@ -29,5 +26,5 @@ */ @FunctionalInterface public interface ArchiverFactory { - Archiver create(Consumer configurer); + Archiver create(); } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java b/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java index f49f27423..fb890880a 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java @@ -32,24 +32,16 @@ public interface ArchiverManager { @Nonnull Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException; - /** - * Returns a factory for the named archive format. - * - * @since 5.0.0 - */ - @Nonnull - ArchiverFactory getArchiverFactory(@Nonnull String archiverName) throws NoSuchArchiverException; - @Nonnull Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException; /** - * Returns an archiver factory selected from the file extension. + * Returns an unarchiver factory selected from the file extension. * * @since 5.0.0 */ @Nonnull - ArchiverFactory getArchiverFactory(@Nonnull File file) throws NoSuchArchiverException; + ArchiverFactory getArchiverFactory(@Nonnull String archiverName) throws NoSuchArchiverException; @Nonnull Collection getAvailableArchivers(); @@ -68,28 +60,12 @@ public interface ArchiverManager { @Nonnull UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException; - /** - * Returns an unarchiver factory selected from the file extension. - * - * @since 5.0.0 - */ - @Nonnull - UnArchiverFactory getUnArchiverFactory(@Nonnull File file) throws NoSuchArchiverException; - @Nonnull Collection getAvailableUnArchivers(); @Nonnull PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException; - /** - * Returns a resource collection factory selected from the file extension. - * - * @since 5.0.0 - */ - @Nonnull - PlexusIoResourceCollectionFactory getResourceCollectionFactory(@Nonnull File file) throws NoSuchArchiverException; - @Nonnull PlexusIoResourceCollection getResourceCollection(String unArchiverName) throws NoSuchArchiverException; diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/CdiArchiverFactory.java b/src/main/java/org/codehaus/plexus/archiver/manager/CdiArchiverFactory.java index 48635c088..5063f241f 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/CdiArchiverFactory.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/CdiArchiverFactory.java @@ -20,11 +20,8 @@ import javax.inject.Provider; import java.util.Objects; -import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.internal.DefaultArchiverConfigurer; -import org.codehaus.plexus.archivers.spi.ArchiverConfigurer; final class CdiArchiverFactory implements ArchiverFactory { private final Provider provider; @@ -34,9 +31,7 @@ final class CdiArchiverFactory implements ArchiverFactory { } @Override - public Archiver create(Consumer configurer) { - Archiver archiver = provider.get(); - Objects.requireNonNull(configurer, "configurer").accept(new DefaultArchiverConfigurer(archiver)); - return archiver; + public Archiver create() { + return provider.get(); } } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/CdiPlexusIoResourceCollectionFactory.java b/src/main/java/org/codehaus/plexus/archiver/manager/CdiPlexusIoResourceCollectionFactory.java index 2578646bb..d1b2e85dc 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/CdiPlexusIoResourceCollectionFactory.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/CdiPlexusIoResourceCollectionFactory.java @@ -20,10 +20,7 @@ import javax.inject.Provider; import java.util.Objects; -import java.util.function.Consumer; -import org.codehaus.plexus.archivers.internal.DefaultPlexusIoResourceCollectionConfigurer; -import org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; final class CdiPlexusIoResourceCollectionFactory implements PlexusIoResourceCollectionFactory { @@ -34,10 +31,7 @@ final class CdiPlexusIoResourceCollectionFactory implements PlexusIoResourceColl } @Override - public PlexusIoResourceCollection create(Consumer configurer) { - PlexusIoResourceCollection collection = provider.get(); - Objects.requireNonNull(configurer, "configurer") - .accept(new DefaultPlexusIoResourceCollectionConfigurer(collection)); - return collection; + public PlexusIoResourceCollection create() { + return provider.get(); } } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/CdiResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/CdiResourceCollectionRegistry.java new file mode 100644 index 000000000..c789fb35f --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/CdiResourceCollectionRegistry.java @@ -0,0 +1,27 @@ +package org.codehaus.plexus.archiver.manager; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Provider; + +import java.util.Map; +import java.util.stream.Collectors; + +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +@Named +public class CdiResourceCollectionRegistry extends AbstractResourceCollectionRegistry { + + @Inject + public CdiResourceCollectionRegistry( + Map> plexusIoResourceCollections) { + super(plexusIoResourceCollections(plexusIoResourceCollections)); + } + + private static Map plexusIoResourceCollections( + Map> plexusIoResourceCollections) { + return plexusIoResourceCollections.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, entry -> new CdiPlexusIoResourceCollectionFactory(entry.getValue()))); + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/CdiUnArchiverFactory.java b/src/main/java/org/codehaus/plexus/archiver/manager/CdiUnArchiverFactory.java index 8a5d720e2..17114bb85 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/CdiUnArchiverFactory.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/CdiUnArchiverFactory.java @@ -20,11 +20,8 @@ import javax.inject.Provider; import java.util.Objects; -import java.util.function.Consumer; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.internal.DefaultUnArchiverConfigurer; -import org.codehaus.plexus.archivers.spi.UnArchiverConfigurer; final class CdiUnArchiverFactory implements UnArchiverFactory { private final Provider provider; @@ -34,9 +31,7 @@ final class CdiUnArchiverFactory implements UnArchiverFactory { } @Override - public UnArchiver create(Consumer configurer) { - UnArchiver unarchiver = provider.get(); - Objects.requireNonNull(configurer, "configurer").accept(new DefaultUnArchiverConfigurer(unarchiver)); - return unarchiver; + public UnArchiver create() { + return provider.get(); } } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/DefaultArchiverManager.java b/src/main/java/org/codehaus/plexus/archiver/manager/DefaultArchiverManager.java index c119299e5..ac7b1d8b8 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/DefaultArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/DefaultArchiverManager.java @@ -45,20 +45,18 @@ public DefaultArchiverManager( private static Map archivers(Map> archivers) { return archivers.entrySet().stream() - .collect(Collectors.toUnmodifiableMap( - Map.Entry::getKey, entry -> new CdiArchiverFactory(entry.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, entry -> new CdiArchiverFactory(entry.getValue()))); } private static Map unarchivers(Map> unArchivers) { return unArchivers.entrySet().stream() - .collect(Collectors.toUnmodifiableMap( - Map.Entry::getKey, entry -> new CdiUnArchiverFactory(entry.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, entry -> new CdiUnArchiverFactory(entry.getValue()))); } private static Map plexusIoResourceCollections( Map> plexusIoResourceCollections) { return plexusIoResourceCollections.entrySet().stream() - .collect(Collectors.toUnmodifiableMap( + .collect(Collectors.toMap( Map.Entry::getKey, entry -> new CdiPlexusIoResourceCollectionFactory(entry.getValue()))); } } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/DefaultResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/DefaultResourceCollectionRegistry.java new file mode 100644 index 000000000..984656cf7 --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/DefaultResourceCollectionRegistry.java @@ -0,0 +1,11 @@ +package org.codehaus.plexus.archiver.manager; + +import java.util.Map; + +public class DefaultResourceCollectionRegistry extends AbstractResourceCollectionRegistry { + + public DefaultResourceCollectionRegistry( + Map plexusIoResourceCollections) { + super(plexusIoResourceCollections); + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/FileNames.java b/src/main/java/org/codehaus/plexus/archiver/manager/FileNames.java new file mode 100644 index 000000000..aa700f51b --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/FileNames.java @@ -0,0 +1,42 @@ +package org.codehaus.plexus.archiver.manager; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.nio.file.Path; +import java.util.Locale; + +import org.codehaus.plexus.util.StringUtils; + +class FileNames { + + private FileNames() {} + + @Nonnull + static String getFileExtension(@Nonnull Path path) { + return getFileExtension(path.getFileName().toString()); + } + + @Nonnull + static String getFileExtension(@Nonnull File file) { + return getFileExtension(file.getName()); + } + + @Nonnull + private static String getFileExtension(@Nonnull String name) { + String fileName = name.toLowerCase(Locale.ROOT); + String[] tokens = StringUtils.split(fileName, "."); + + String archiveExt = ""; + + if (tokens.length == 2) { + archiveExt = tokens[1]; + } else if (tokens.length > 2 && "tar".equals(tokens[tokens.length - 2])) { + archiveExt = "tar." + tokens[tokens.length - 1]; + } else if (tokens.length > 2) { + archiveExt = tokens[tokens.length - 1]; + } + + return archiveExt; + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java b/src/main/java/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java index 3e859ce0a..3107146db 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java @@ -17,9 +17,6 @@ package org.codehaus.plexus.archiver.manager; -import java.util.function.Consumer; - -import org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -29,5 +26,5 @@ */ @FunctionalInterface public interface PlexusIoResourceCollectionFactory { - PlexusIoResourceCollection create(Consumer configurer); + PlexusIoResourceCollection create(); } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/ResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/ResourceCollectionRegistry.java new file mode 100644 index 000000000..086b16e61 --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/ResourceCollectionRegistry.java @@ -0,0 +1,10 @@ +package org.codehaus.plexus.archiver.manager; + +import java.io.File; + +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +public interface ResourceCollectionRegistry { + + PlexusIoResourceCollection getResourceCollection(File archiveFile) throws NoSuchArchiverException; +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java deleted file mode 100644 index 8ded2eda9..000000000 --- a/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archiver.manager; - -import java.util.Map; -import java.util.ServiceLoader; -import java.util.ServiceLoader.Provider; -import java.util.stream.Collectors; - -import org.codehaus.plexus.archivers.spi.ArchiverProvider; -import org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider; -import org.codehaus.plexus.archivers.spi.UnArchiverProvider; - -public class ServiceLoaderArchiverManager extends AbstractArchiverManager { - - public ServiceLoaderArchiverManager() { - super(archivers(), unarchivers(), plexusIoResourceCollections()); - } - - private static Map archivers() { - return ServiceLoader.load(ArchiverProvider.class).stream() - .map(Provider::get) - .collect(Collectors.toMap(ArchiverProvider::getName, provider -> provider::newArchiver)); - } - - private static Map unarchivers() { - return ServiceLoader.load(UnArchiverProvider.class).stream() - .map(Provider::get) - .collect(Collectors.toMap(UnArchiverProvider::getName, provider -> provider::newUnarchiver)); - } - - private static Map plexusIoResourceCollections() { - return ServiceLoader.load(PlexusIoResourceCollectionProvider.class).stream() - .map(Provider::get) - .collect(Collectors.toMap( - PlexusIoResourceCollectionProvider::getName, - provider -> provider::newPlexusIoResourceCollection)); - } -} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java b/src/main/java/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java index 8ff6cd071..bf7146447 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java @@ -17,10 +17,7 @@ package org.codehaus.plexus.archiver.manager; -import java.util.function.Consumer; - import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.UnArchiverConfigurer; /** * Creates configured unarchiver instances. @@ -29,5 +26,5 @@ */ @FunctionalInterface public interface UnArchiverFactory { - UnArchiver create(Consumer configurer); + UnArchiver create(); } diff --git a/src/main/java/org/codehaus/plexus/archiver/util/ResourceUtils.java b/src/main/java/org/codehaus/plexus/archiver/util/ResourceUtils.java index ed351704d..b03a7e76c 100644 --- a/src/main/java/org/codehaus/plexus/archiver/util/ResourceUtils.java +++ b/src/main/java/org/codehaus/plexus/archiver/util/ResourceUtils.java @@ -74,8 +74,8 @@ public static void copyFile(InputStream input, File outFile) throws IOException * Checks, whether the resource and the file are identical. */ public static boolean isSame(PlexusIoResource resource, File file) { - if (resource instanceof FileSupplier supplier) { - File resourceFile = supplier.getFile(); + if (resource instanceof FileSupplier) { + File resourceFile = ((FileSupplier) resource).getFile(); return file.equals(resourceFile); } return false; @@ -87,8 +87,8 @@ public static boolean isSame(PlexusIoResource resource, File file) { * slower than comparing the files. */ public static boolean isCanonicalizedSame(PlexusIoResource resource, File file) throws IOException { - if (resource instanceof FileSupplier supplier) { - File resourceFile = supplier.getFile(); + if (resource instanceof FileSupplier) { + File resourceFile = ((FileSupplier) resource).getFile(); return file.getCanonicalFile().equals(resourceFile.getCanonicalFile()); } return false; diff --git a/src/main/java/org/codehaus/plexus/archiver/util/Streams.java b/src/main/java/org/codehaus/plexus/archiver/util/Streams.java index 99c0678e3..1e8f84bde 100644 --- a/src/main/java/org/codehaus/plexus/archiver/util/Streams.java +++ b/src/main/java/org/codehaus/plexus/archiver/util/Streams.java @@ -37,11 +37,11 @@ public class Streams { public static final InputStream EMPTY_INPUTSTREAM = new ByteArrayInputStream(new byte[0]); public static BufferedInputStream bufferedInputStream(InputStream is) { - return is instanceof BufferedInputStream bis ? bis : new BufferedInputStream(is, 65536); + return is instanceof BufferedInputStream ? (BufferedInputStream) is : new BufferedInputStream(is, 65536); } public static BufferedOutputStream bufferedOutputStream(OutputStream os) { - return os instanceof BufferedOutputStream bos ? bos : new BufferedOutputStream(os, 65536); + return os instanceof BufferedOutputStream ? (BufferedOutputStream) os : new BufferedOutputStream(os, 65536); } public static byte[] cacheBuffer() { diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java b/src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java deleted file mode 100644 index a68f87560..000000000 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.internal; - -import java.nio.file.Path; -import java.nio.file.attribute.FileTime; -import java.nio.file.attribute.PosixFilePermission; -import java.util.Comparator; -import java.util.Objects; - -import org.codehaus.plexus.archiver.ArchivedFileSet; -import org.codehaus.plexus.archiver.ArchivedFileSetSpec; -import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; -import org.codehaus.plexus.archiver.FileSet; -import org.codehaus.plexus.archiver.FileSetSpec; -import org.codehaus.plexus.archivers.spi.ArchiveCreation; -import org.codehaus.plexus.archivers.spi.ArchiverConfigurer; -import org.codehaus.plexus.archivers.spi.DuplicateHandling; -import org.codehaus.plexus.archivers.spi.PermissionHandling; -import org.codehaus.plexus.archivers.spi.UnixPermissions; - -public final class DefaultArchiverConfigurer implements ArchiverConfigurer { - private final Archiver archiver; - - public DefaultArchiverConfigurer(Archiver archiver) { - this.archiver = Objects.requireNonNull(archiver, "archiver"); - } - - @Override - public void addFileSet(FileSet fileSet) { - archiver.addFileSet(Objects.requireNonNull(fileSet, "fileSet")); - } - - @Override - public void addFileSet(FileSetSpec fileSetSpec) { - archiver.addFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec")); - } - - @Override - public void addArchivedFileSet(ArchivedFileSet fileSet) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSet, "fileSet")); - } - - @Override - public void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec")); - } - - @Override - public void setDestFile(Path destFile) { - archiver.setDestFile(Objects.requireNonNull(destFile, "destFile").toFile()); - } - - @Override - public void setFileMode(UnixPermissions permissions) { - archiver.setFileMode(toMode(permissions)); - } - - @Override - public void setDefaultFileMode(UnixPermissions permissions) { - archiver.setDefaultFileMode(toMode(permissions)); - } - - @Override - public void setDirectoryMode(UnixPermissions permissions) { - archiver.setDirectoryMode(toMode(permissions)); - } - - @Override - public void setDefaultDirectoryMode(UnixPermissions permissions) { - archiver.setDefaultDirectoryMode(toMode(permissions)); - } - - @Override - public void setEmptyDirectoryHandling(EmptyDirectoryHandling handling) { - archiver.setIncludeEmptyDirs(Objects.requireNonNull(handling, "handling") == EmptyDirectoryHandling.INCLUDE); - } - - @Override - public void setDotFileDirectory(Path dotFileDirectory) { - archiver.setDotFileDirectory( - Objects.requireNonNull(dotFileDirectory, "dotFileDirectory").toFile()); - } - - @Override - public void setForced(ArchiveCreation archiveCreation) { - archiver.setForced(Objects.requireNonNull(archiveCreation, "archiveCreation") == ArchiveCreation.ALWAYS); - } - - @Override - public void setDuplicateBehavior(DuplicateHandling duplicateHandling) { - Objects.requireNonNull(duplicateHandling, "duplicateHandling"); - String behavior = duplicateHandling == DuplicateHandling.ADD - ? Archiver.DUPLICATES_ADD - : duplicateHandling == DuplicateHandling.PRESERVE - ? Archiver.DUPLICATES_PRESERVE - : duplicateHandling == DuplicateHandling.SKIP - ? Archiver.DUPLICATES_SKIP - : Archiver.DUPLICATES_FAIL; - archiver.setDuplicateBehavior(behavior); - } - - @Override - public void setIgnorePermissions(PermissionHandling permissionHandling) { - archiver.setIgnorePermissions( - Objects.requireNonNull(permissionHandling, "permissionHandling") == PermissionHandling.IGNORE); - } - - @Override - public void setLastModifiedTime(FileTime lastModifiedTime) { - archiver.setLastModifiedTime(Objects.requireNonNull(lastModifiedTime, "lastModifiedTime")); - } - - @Override - public void setFilenameComparator(Comparator filenameComparator) { - archiver.setFilenameComparator(Objects.requireNonNull(filenameComparator, "filenameComparator")); - } - - @Override - public void setOverrideUid(int uid) { - if (uid < 0) { - throw new IllegalArgumentException("uid must not be negative"); - } - archiver.setOverrideUid(uid); - } - - @Override - public void setOverrideUserName(String userName) { - archiver.setOverrideUserName(Objects.requireNonNull(userName, "userName")); - } - - @Override - public void setOverrideGid(int gid) { - if (gid < 0) { - throw new IllegalArgumentException("gid must not be negative"); - } - archiver.setOverrideGid(gid); - } - - @Override - public void setOverrideGroupName(String groupName) { - archiver.setOverrideGroupName(Objects.requireNonNull(groupName, "groupName")); - } - - @Override - public void setUmask(UnixPermissions permissions) { - archiver.setUmask(toMode(permissions)); - } - - @Override - public void configureReproducibleBuild(FileTime lastModifiedTime) { - archiver.configureReproducibleBuild(Objects.requireNonNull(lastModifiedTime, "lastModifiedTime")); - } - - private static int toMode(UnixPermissions unixPermissions) { - int mode = 0; - for (PosixFilePermission permission : - Objects.requireNonNull(unixPermissions, "unixPermissions").asPosixFilePermissions()) { - mode |= switch (permission) { - case OWNER_READ -> 0_400; - case OWNER_WRITE -> 0_200; - case OWNER_EXECUTE -> 0_100; - case GROUP_READ -> 0_040; - case GROUP_WRITE -> 0_020; - case GROUP_EXECUTE -> 0_010; - case OTHERS_READ -> 0_004; - case OTHERS_WRITE -> 0_002; - case OTHERS_EXECUTE -> 0_001; - }; - } - return mode; - } -} diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java deleted file mode 100644 index e64f96966..000000000 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.internal; - -import java.nio.charset.Charset; -import java.nio.file.Path; -import java.util.List; -import java.util.Objects; - -import org.codehaus.plexus.archiver.CaseSensitivities; -import org.codehaus.plexus.archiver.CaseSensitivity; -import org.codehaus.plexus.archiver.DefaultExcludes; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; -import org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionConfigurer; -import org.codehaus.plexus.archivers.spi.SymbolicLinkHandling; -import org.codehaus.plexus.components.io.filemappers.FileMapper; -import org.codehaus.plexus.components.io.fileselectors.FileSelector; -import org.codehaus.plexus.components.io.functions.InputStreamTransformer; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection; -import org.codehaus.plexus.components.io.resources.EncodingSupported; -import org.codehaus.plexus.components.io.resources.PlexusIoCompressedFileResourceCollection; -import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; -import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; - -public final class DefaultPlexusIoResourceCollectionConfigurer implements PlexusIoResourceCollectionConfigurer { - private final PlexusIoResourceCollection collection; - - public DefaultPlexusIoResourceCollectionConfigurer(PlexusIoResourceCollection collection) { - this.collection = Objects.requireNonNull(collection, "collection"); - } - - @Override - public void setSource(Path source) { - Objects.requireNonNull(source, "source"); - if (collection instanceof AbstractPlexusIoArchiveResourceCollection archiveCollection) { - archiveCollection.setFile(source.toFile()); - } else if (collection instanceof PlexusIoCompressedFileResourceCollection compressedCollection) { - compressedCollection.setFile(source.toFile()); - } else if (collection instanceof PlexusIoFileResourceCollection fileCollection) { - fileCollection.setBaseDir(source.toFile()); - } else { - throw unsupported("source paths"); - } - } - - @Override - public void setPrefix(String prefix) { - configurableCollection().setPrefix(Objects.requireNonNull(prefix, "prefix")); - } - - @Override - public void setIncludes(List includes) { - configurableCollection().setIncludes(List.copyOf(includes).toArray(String[]::new)); - } - - @Override - public void setExcludes(List excludes) { - configurableCollection().setExcludes(List.copyOf(excludes).toArray(String[]::new)); - } - - @Override - public void setFileSelectors(List fileSelectors) { - configurableCollection().setFileSelectors(List.copyOf(fileSelectors).toArray(FileSelector[]::new)); - } - - @Override - public void setFileMappers(List fileMappers) { - configurableCollection().setFileMappers(List.copyOf(fileMappers).toArray(FileMapper[]::new)); - } - - @Override - public void setStreamTransformer(InputStreamTransformer streamTransformer) { - configurableCollection().setStreamTransformer(Objects.requireNonNull(streamTransformer, "streamTransformer")); - } - - @Override - public void setCaseSensitivity(CaseSensitivity caseSensitivity) { - configurableCollection().setCaseSensitive(CaseSensitivities.resolve(caseSensitivity)); - } - - @Override - public void setDefaultExcludes(DefaultExcludes defaultExcludes) { - configurableCollection() - .setUsingDefaultExcludes( - Objects.requireNonNull(defaultExcludes, "defaultExcludes") == DefaultExcludes.USE); - } - - @Override - public void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling) { - configurableCollection() - .setIncludingEmptyDirectories(Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling") - == EmptyDirectoryHandling.INCLUDE); - } - - @Override - public void setEncoding(Charset charset) { - if (!(collection instanceof EncodingSupported encodingSupported)) { - throw unsupported("filename encoding"); - } - encodingSupported.setEncoding(Objects.requireNonNull(charset, "charset")); - } - - @Override - public void setSymbolicLinkHandling(SymbolicLinkHandling symbolicLinkHandling) { - Objects.requireNonNull(symbolicLinkHandling, "symbolicLinkHandling"); - if (!(collection instanceof PlexusIoFileResourceCollection fileCollection)) { - throw unsupported("symbolic-link traversal"); - } - fileCollection.setFollowingSymLinks(symbolicLinkHandling == SymbolicLinkHandling.FOLLOW); - } - - private UnsupportedOperationException unsupported(String capability) { - return new UnsupportedOperationException(collection.getClass().getName() + " does not support " + capability); - } - - private AbstractPlexusIoResourceCollection configurableCollection() { - if (collection instanceof AbstractPlexusIoResourceCollection configurableCollection) { - return configurableCollection; - } - throw unsupported("common resource collection configuration"); - } -} diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/package-info.java b/src/main/java/org/codehaus/plexus/archivers/internal/package-info.java deleted file mode 100644 index 6beca257b..000000000 --- a/src/main/java/org/codehaus/plexus/archivers/internal/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -/** - * Internal implementations. This package must not be exported by the module descriptor. - */ -package org.codehaus.plexus.archivers.internal; diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java b/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java deleted file mode 100644 index 233c4557f..000000000 --- a/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.spi; - -import java.nio.charset.Charset; -import java.nio.file.Path; -import java.util.List; - -import org.codehaus.plexus.archiver.CaseSensitivity; -import org.codehaus.plexus.archiver.DefaultExcludes; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; -import org.codehaus.plexus.components.io.filemappers.FileMapper; -import org.codehaus.plexus.components.io.fileselectors.FileSelector; -import org.codehaus.plexus.components.io.functions.InputStreamTransformer; - -/** - * Configures a Plexus IO resource collection before it is exposed to callers. - * - * @since 5.0.0 - */ -public interface PlexusIoResourceCollectionConfigurer { - void setSource(Path source); - - void setPrefix(String prefix); - - void setIncludes(List includes); - - void setExcludes(List excludes); - - void setFileSelectors(List fileSelectors); - - void setFileMappers(List fileMappers); - - void setStreamTransformer(InputStreamTransformer streamTransformer); - - void setCaseSensitivity(CaseSensitivity caseSensitivity); - - void setDefaultExcludes(DefaultExcludes defaultExcludes); - - void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling); - - void setEncoding(Charset charset); - - void setSymbolicLinkHandling(SymbolicLinkHandling symbolicLinkHandling); -} diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/UnixPermissions.java b/src/main/java/org/codehaus/plexus/archivers/spi/UnixPermissions.java deleted file mode 100644 index 60eaa1e4f..000000000 --- a/src/main/java/org/codehaus/plexus/archivers/spi/UnixPermissions.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.spi; - -import java.nio.file.attribute.PosixFilePermission; -import java.util.Objects; -import java.util.Set; - -/** - * Unix permissions applied to archive entries or used as an archive umask. - * - * @since 5.0.0 - */ -public abstract sealed class UnixPermissions permits PosixPermissions { - - UnixPermissions() {} - - public static UnixPermissions of(Set permissions) { - return new PosixPermissions(permissions); - } - - public abstract Set asPosixFilePermissions(); -} - -final class PosixPermissions extends UnixPermissions { - final Set permissions; - - PosixPermissions(Set permissions) { - this.permissions = Set.copyOf(Objects.requireNonNull(permissions, "permissions")); - } - - @Override - public Set asPosixFilePermissions() { - return permissions; - } -} diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java new file mode 100644 index 000000000..c04615792 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -0,0 +1,146 @@ +package org.codehaus.plexus.archiver; + + +import javax.annotation.CheckForNull; + +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; +import org.codehaus.plexus.archivers.config.CaseSensitivities; +import org.codehaus.plexus.archivers.config.CaseSensitivity; +import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.StandardExcludes; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +import java.io.File; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +/** + * A file set, which consists of the files and directories in + * an archive. + * + * @since 1.0-alpha-9 + */ +public interface ArchivedFileSet extends BaseFileSet { + + /** + * Returns the archive file. + */ + @CheckForNull + File getArchive(); + + + /** + * + * @param archive + * @return + * @since 5.0.0 + */ + public static Builder fromArchive(Path archive) { + return new Builder(archive); + } + + /** + * @since 5.0.0 + */ + static final class Builder { + + private final Path archive; + private String prefix; + private Collection includes; + private Collection excludes; + private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; + private Collection standardExcludes = List.of(); + private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; + private Collection fileSelectors; + private InputStreamTransformer streamTransformer; + private Collection fileMappers; + + private Builder(Path archive) { + this.archive = Objects.requireNonNull(archive, "archive"); + } + + public Builder prefix(String prefix) { + this.prefix = prefix; + return this; + } + + public Builder includes(Collection includes) { + this.includes = List.copyOf(includes); + return this; + } + + public Builder excludes(Collection excludes) { + this.excludes = List.copyOf(excludes); + return this; + } + + public Builder caseSensitive(CaseSensitivity caseSensitivity) { + this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); + return this; + } + + public Builder standardExcludes(StandardExcludes.ExcludeMode mode) { + this.standardExcludes = List.of(mode); + return this; + } + + public Builder standardExcludes(StandardExcludes.ExcludeGroup... groups) { + this.standardExcludes = Arrays.asList(groups); + return this; + } + + public Builder emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { + this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); + return this; + } + + public Builder fileSelectors(Collection fileSelectors) { + this.fileSelectors = List.copyOf(fileSelectors); + return this; + } + + public Builder streamTransformer(InputStreamTransformer streamTransformer) { + this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); + return this; + } + + public Builder fileMappers(Collection fileMappers) { + this.fileMappers = List.copyOf(fileMappers); + return this; + } + + public ArchivedFileSet build() { + DefaultArchivedFileSet fileSet = new DefaultArchivedFileSet(archive.toFile()); + fileSet.setPrefix(prefix); + fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); + fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); + fileSet.setCaseSensitive(isCaseSensitive()); + fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); + fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); + if (streamTransformer != null) { + fileSet.setStreamTransformer(streamTransformer); + } + fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); + + if (standardExcludes.contains(StandardExcludes.NONE)) { + fileSet.usingDefaultExcludes(false); + } else if (standardExcludes.contains(StandardExcludes.PLEXUS)) { + fileSet.usingDefaultExcludes(true); + } + return fileSet; + } + + private boolean isCaseSensitive() { + return CaseSensitivities.resolve(caseSensitivity); + } + + private boolean includesEmptyDirectories() { + return emptyDirectoryHandling == EmptyDirectoryHandling.INCLUDE; + } + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java new file mode 100644 index 000000000..8a217298f --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java @@ -0,0 +1,169 @@ +package org.codehaus.plexus.archiver; + + +import java.io.File; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +import org.codehaus.plexus.archiver.ArchivedFileSet.Builder; +import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.archivers.config.CaseSensitivities; +import org.codehaus.plexus.archivers.config.CaseSensitivity; +import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.StandardExcludes; +import org.codehaus.plexus.archivers.config.SymbolicLinkHandling; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +/** + * A file set, which consists of the files and directories in + * a common base directory. + * + * @since 1.0-alpha-9 + */ +public interface FileSet extends BaseFileSet { + + /** + * Returns the file sets base directory. + */ + File getDirectory(); + + /** + * Returns whether symbolic links below the base directory are followed. + *

+ * When {@code false} (the default), a symbolic link is added to the archive as a link and the + * contents of a linked directory are not scanned. When {@code true}, links are resolved: a + * linked directory is added as a directory and its target's contents are included. + *

+ * Following links means the scan can descend into a directory that links back to one of its own + * ancestors, so only enable it for trees known not to contain such cycles. + * + * @since 4.14.0 + */ + default boolean isFollowingSymLinks() { + return false; + } + + /** + * + * @param directory + * @return + * @since 5.0.0 + */ + public static Builder fromDirectory(Path directory) { + return new Builder(directory); + } + + /** + * @since 5.0.0 + */ + static final class Builder { + private final Path directory; + private String prefix; + private Collection includes; + private Collection excludes; + private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; + private Collection standardExcludes = List.of(); + private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; + private SymbolicLinkHandling symbolicLinkHandling = SymbolicLinkHandling.PRESERVE; + private Collection fileSelectors; + private InputStreamTransformer streamTransformer; + private Collection fileMappers; + + private Builder(Path directory) { + this.directory = Objects.requireNonNull(directory, "directory"); + } + + public Builder prefix(String prefix) { + this.prefix = prefix; + return this; + } + + public Builder includes(Collection includes) { + this.includes = List.copyOf(includes); + return this; + } + + public Builder excludes(Collection excludes) { + this.excludes = List.copyOf(excludes); + return this; + } + + public Builder caseSensitive(CaseSensitivity caseSensitivity) { + this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); + return this; + } + + public Builder standardExcludes(StandardExcludes.ExcludeMode mode) { + this.standardExcludes = List.of(mode); + return this; + } + + public Builder standardExcludes(StandardExcludes.ExcludeGroup... groups) { + this.standardExcludes = Arrays.asList(groups); + return this; + } + + public Builder emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { + this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); + return this; + } + + public Builder symbolicLinks(SymbolicLinkHandling symbolicLinkHandling) { + this.symbolicLinkHandling = Objects.requireNonNull(symbolicLinkHandling, "symbolicLinkHandling"); + return this; + } + + public Builder fileSelectors(Collection fileSelectors) { + this.fileSelectors = List.copyOf(fileSelectors); + return this; + } + + public Builder streamTransformer(InputStreamTransformer streamTransformer) { + this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); + return this; + } + + public Builder fileMappers(Collection fileMappers) { + this.fileMappers = List.copyOf(fileMappers); + return this; + } + + public FileSet build() { + DefaultFileSet fileSet = new DefaultFileSet(directory.toFile()); + fileSet.setPrefix(prefix); + fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); + fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); + fileSet.setCaseSensitive(isCaseSensitive()); + fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); + fileSet.setFollowingSymLinks(followsSymbolicLinks()); + fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); + if (streamTransformer != null) { + fileSet.setStreamTransformer(streamTransformer); + } + fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); + if (standardExcludes.contains(StandardExcludes.NONE)) { + fileSet.usingDefaultExcludes(false); + } else if (standardExcludes.contains(StandardExcludes.PLEXUS)) { + fileSet.usingDefaultExcludes(true); + } + return fileSet; + } + + private boolean isCaseSensitive() { + return CaseSensitivities.resolve(caseSensitivity); + } + + private boolean followsSymbolicLinks() { + return symbolicLinkHandling == SymbolicLinkHandling.FOLLOW; + } + + private boolean includesEmptyDirectories() { + return emptyDirectoryHandling == EmptyDirectoryHandling.INCLUDE; + } + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java index 792a9565e..ada3521ad 100644 --- a/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.bzip2; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java index ac9328c36..6b3ea1bfc 100644 --- a/src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.bzip2; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java index b8f0f7e20..0b13534b4 100644 --- a/src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.bzip2; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java index 0190c9b5b..55c2f0224 100644 --- a/src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.bzip2; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java index b7594a3a1..1b1581b33 100644 --- a/src/main/java/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.car; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java index dc3bb9c88..6f59dc951 100644 --- a/src/main/java/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.car; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java index 3e436ec38..72b76a982 100644 --- a/src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.dir; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java index 26321adca..2dbd6ae1c 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.ear; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java index edef82dbd..4e3cc99dc 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.ear; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java index 57200416d..73d078c0b 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.ear; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java index e35fe3f31..7b1afdb1d 100644 --- a/src/main/java/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.esb; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java index 58e54e5c4..18e64e9b7 100644 --- a/src/main/java/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.esb; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java index 44c03d2d7..611301801 100644 --- a/src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.gzip; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java index c4d491fa3..e6fcabdf3 100644 --- a/src/main/java/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.gzip; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java index 5057cf2be..7e54bf9b7 100644 --- a/src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.gzip; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java index 2304b81cf..e9754dccb 100644 --- a/src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.gzip; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java index 979dfe710..7080e2070 100644 --- a/src/main/java/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.jar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java index 1112a6317..d041ebfce 100644 --- a/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.jar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java index 7129a8e29..859410800 100644 --- a/src/main/java/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.jar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java index 26b53fd7b..9cf1d1fd2 100644 --- a/src/main/java/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.jar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java new file mode 100644 index 000000000..335d309ad --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java @@ -0,0 +1,75 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.codehaus.plexus.archiver.manager; + +import java.nio.file.Path; +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; + +/** + * Creates configured archiver instances. + * + * @since 5.0.0 + */ +@FunctionalInterface +public interface ArchiverFactory { + /** + * Creates a new archiver instance for manual configuration. + * + * In legacy code, consumers mutate the returned archiver directly: + *

{@code
+     * Archiver archiver = factory.create();
+     * archiver.setDestFile(file);
+     * archiver.addFileSet(fileSet);
+     * archiver.createArchive();
+     * }
+ * + * @return a new mutable archiver instance + */ + Archiver create(); + + /** + * Creates and configures an archiver using the configurer API. + * + *

The returned archiver might be unmodifiable to prevent accidental mutations + * after configuration is complete. In that case calling mutation methods will throw + * {@link UnsupportedOperationException}. + * + * Example: + *

{@code
+     * Archiver configured = factory.configure(c -> c
+     *     .setDestFile(outputJar)
+     *     .addFileSetFromSpec(fileSetSpec));
+     * configured.createArchive(); // OK - read-only operation
+     * configured.addFileSet(other); // UnsupportedOperationException
+     * }
+ * + * @param configurer configuration callback + * @return an unmodifiable archiver instance + * @throws UnsupportedOperationException if mutation methods are called + * @since 5.0.0 + */ + default Archiver create(Path path, Consumer configurer) { + Archiver archiver = create(); + archiver.setDestFile(path.toFile()); + configurer.accept(ArchiverConfigurer.of(archiver)); + return archiver; + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java new file mode 100644 index 000000000..ca168f7b5 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java @@ -0,0 +1,124 @@ +/* + * Copyright 2001,2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.codehaus.plexus.archiver.manager; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Objects; +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +/** + * @author dantran + */ +public interface ArchiverManager { + @Nonnull + Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException; + + /** + * Returns a factory for the named archive format. + * + * @since 5.0.0 + */ + @Nonnull + ArchiverFactory getArchiverFactory(@Nonnull String archiverName) throws NoSuchArchiverException; + + @Nonnull + Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableArchivers(); + + @Nonnull + UnArchiver getUnArchiver(@Nonnull String unArchiverName) throws NoSuchArchiverException; + + /** + * Returns a factory for the named archive extraction format. + * + * @since 5.0.0 + */ + @Nonnull + UnArchiverFactory getUnArchiverFactory(@Nonnull String unArchiverName) throws NoSuchArchiverException; + + @Nonnull + UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableUnArchivers(); + + @Nonnull + PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + PlexusIoResourceCollection getResourceCollection(String unArchiverName) throws NoSuchArchiverException; + + /** + * Returns a resource collection factory for the named format. + * + * @since 5.0.0 + */ + @Nonnull + PlexusIoResourceCollectionFactory getResourceCollectionFactory(String resourceCollectionName) + throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableResourceCollections(); + + // + // Methods below are default methods added on top of original interface + // + + /** + * Returns an archiver factory selected from the file extension. + * + * @since 5.0.0 + */ + @Nonnull + default Archiver createArchiver(@Nonnull Path destFile, Consumer configurer) throws NoSuchArchiverException { + Objects.requireNonNull(destFile, "destFile"); + Objects.requireNonNull(configurer, "configurer"); + + String format = FileNames.getFileExtension(destFile); + + return getArchiverFactory(format).create(destFile, configurer); + } + + /** + * Returns an unarchiver factory selected from the file extension. + * + * @since 5.0.0 + */ + @Nonnull + default UnArchiver createUnArchiver(@Nonnull Path srcFile, Consumer configurer) throws NoSuchArchiverException { + Objects.requireNonNull(srcFile, "srcFile"); + Objects.requireNonNull(configurer, "configurer"); + + String format = FileNames.getFileExtension(srcFile); + + return getUnArchiverFactory(format).create(srcFile, configurer); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManagers.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManagers.java new file mode 100644 index 000000000..c9e4f32c5 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManagers.java @@ -0,0 +1,46 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.codehaus.plexus.archiver.manager; + +/** + * Factory for creating {@link ArchiverManager} instances configured + * via ServiceLoader discovery of {@link ArchiverProvider}, + * {@link UnArchiverProvider}, and {@link PlexusIoResourceCollectionProvider}. + * + *

This is the recommended way to obtain an ArchiverManager for standard + * usage. For custom implementations, construct them directly. + * + * @since 5.0.0 + */ +public final class ArchiverManagers { + + private ArchiverManagers() { + } + + public static ArchiverManager create() { + return new ServiceLoaderArchiverManager(); + } + + public static ArchiverManager create(ClassLoader classLoader) { + return new ServiceLoaderArchiverManager(classLoader); + } + + public static ArchiverManager create(ModuleLayer moduleLayer) { + return new ServiceLoaderArchiverManager(moduleLayer); + } + +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverFactory.java new file mode 100644 index 000000000..a149a50f3 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverFactory.java @@ -0,0 +1,42 @@ +package org.codehaus.plexus.archiver.manager; + +import java.nio.file.Path; +import java.util.Map; +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.AbstractArchiver; +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer;; +import org.codehaus.plexus.archivers.provider.ArchiverProvider; + +class ServiceLoaderArchiverFactory implements ArchiverFactory { + + private final ArchiverProvider provider; + private final Map resourceCollectionFactories; + + ServiceLoaderArchiverFactory(ArchiverProvider provider, Map resourceCollectionFactories) { + this.provider = provider; + this.resourceCollectionFactories = resourceCollectionFactories; + } + + @Override + public Archiver create() { + Archiver archiver = provider.newArchiver(c -> {}); + + if(archiver instanceof AbstractArchiver aa) { + aa.setResourceCollectionRegistry(new DefaultResourceCollectionRegistry(resourceCollectionFactories)); + } + return archiver; + } + + @Override + public Archiver create(Path path, Consumer configurer) { + Archiver archiver = provider.newArchiver(configurer); + archiver.setDestFile(path.toFile()); + + if(archiver instanceof AbstractArchiver aa) { + aa.setResourceCollectionRegistry(new DefaultResourceCollectionRegistry(resourceCollectionFactories)); + } + return archiver; + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java new file mode 100644 index 000000000..ea562ac91 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -0,0 +1,108 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.codehaus.plexus.archiver.manager; + +import java.nio.file.Path; +import java.util.Map; +import java.util.ServiceLoader; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; +import org.codehaus.plexus.archivers.provider.ArchiverProvider; +import org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.UnArchiverProvider; +import org.codehaus.plexus.components.io.resources.PlexusIoArchivedResourceCollection; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +class ServiceLoaderArchiverManager extends AbstractArchiverManager { + + ServiceLoaderArchiverManager() { + super(archivers(ServiceLoader.load(ArchiverProvider.class), plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class))), + unarchivers(ServiceLoader.load(UnArchiverProvider.class)), + plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class))); + } + + ServiceLoaderArchiverManager(ClassLoader classLoader) { + super(archivers(ServiceLoader.load(ArchiverProvider.class, classLoader), plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class, classLoader))), + unarchivers(ServiceLoader.load(UnArchiverProvider.class, classLoader)), + plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class, classLoader))); + } + + ServiceLoaderArchiverManager(ModuleLayer moduleLayer) { + super(archivers(ServiceLoader.load(moduleLayer, ArchiverProvider.class), plexusIoResourceCollections(ServiceLoader.load(moduleLayer, PlexusIoResourceCollectionProvider.class))), + unarchivers(ServiceLoader.load(moduleLayer, UnArchiverProvider.class)), + plexusIoResourceCollections(ServiceLoader.load(moduleLayer, PlexusIoResourceCollectionProvider.class))); + } + + private static Map archivers(ServiceLoader serviceLoader, Map resourceCollectionFactories) { + return StreamSupport.stream(serviceLoader.spliterator(), false) + .collect(Collectors.toMap(ArchiverProvider::getName, p -> ServiceLoaderArchiverManager.toArchiverFactory(p, resourceCollectionFactories))); + } + + private static Map unarchivers(ServiceLoader serviceLoader) { + return StreamSupport.stream(ServiceLoader.load(UnArchiverProvider.class).spliterator(), false) + .collect(Collectors.toMap(UnArchiverProvider::getName, ServiceLoaderArchiverManager::toUnArchiverFactory)); + } + + private static Map plexusIoResourceCollections(ServiceLoader serviceLoader) { + return StreamSupport.stream(serviceLoader.spliterator(),false) + .collect(Collectors.toMap( + PlexusIoResourceCollectionProvider::getName, + provider -> provider)); + } + + + private static ArchiverFactory toArchiverFactory(ArchiverProvider provider, Map resourceCollectionFactories) { + return new ServiceLoaderArchiverFactory(provider, resourceCollectionFactories); + } + + private static UnArchiverFactory toUnArchiverFactory(UnArchiverProvider provider) { + return new UnArchiverFactory() { + + @Override + public UnArchiver create() { + return provider.newUnArchiver(c -> {}); + } + + @Override + public UnArchiver create(Path path, Consumer configurer) { + UnArchiver unarchiver = provider.newUnArchiver(configurer); + unarchiver.setSourceFile(path.toFile()); + return unarchiver; + } + }; + } + + private static PlexusIoResourceCollectionFactory toPlexusIoResourceCollectionFactory(PlexusIoResourceCollectionProvider provider) { + return new PlexusIoResourceCollectionFactory() { + + @Override + public PlexusIoResourceCollection create() { + return provider.create(); + } + }; + } + +} diff --git a/src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java similarity index 50% rename from src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java rename to src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java index 093c86249..a6389fe53 100644 --- a/src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java @@ -15,22 +15,27 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archiver.manager; + +import java.nio.file.Path; +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; /** - * Controls whether standard version-control and temporary files are excluded. + * Creates configured unarchiver instances. * * @since 5.0.0 */ -public sealed interface DefaultExcludes permits BuiltInDefaultExcludes { - DefaultExcludes USE = new BuiltInDefaultExcludes(true); - DefaultExcludes IGNORE = new BuiltInDefaultExcludes(false); -} - -final class BuiltInDefaultExcludes implements DefaultExcludes { - final boolean use; - - BuiltInDefaultExcludes(boolean use) { - this.use = use; +@FunctionalInterface +public interface UnArchiverFactory { + UnArchiver create(); + + default UnArchiver create(Path path, Consumer configurer) { + UnArchiver unArchiver = create(); + unArchiver.setSourceFile(path.toFile()); + configurer.accept(UnArchiverConfigurer.of(unArchiver)); + return unArchiver; } } diff --git a/src/main/java/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java index e61bfbd57..2dd2cd841 100644 --- a/src/main/java/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.nar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java index b5d6c7940..41705c58a 100644 --- a/src/main/java/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.nar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java index 7c1d382ac..bb840434f 100644 --- a/src/main/java/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.par; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java index 59783a565..0296dc55b 100644 --- a/src/main/java/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.par; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java index 684211b9f..b96601612 100644 --- a/src/main/java/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.rar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java index 0f963e9e2..e96294efd 100644 --- a/src/main/java/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.rar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java index 2e207d43b..7c2b63bcd 100644 --- a/src/main/java/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.rar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java index 817c471a0..3c490656a 100644 --- a/src/main/java/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.resources; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.DefaultPlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; diff --git a/src/main/java/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java index ee49b87d9..218198d66 100644 --- a/src/main/java/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.resources; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; diff --git a/src/main/java/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java index 0e322cbb1..f60f82f76 100644 --- a/src/main/java/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.sar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java index d61da4908..8ab665685 100644 --- a/src/main/java/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.sar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java index f5cd4696f..8ae4059d8 100644 --- a/src/main/java/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.snappy; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java index d3dc2ec96..24f23ecc8 100644 --- a/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.snappy; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java index e7e988cad..d55ed4192 100644 --- a/src/main/java/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.snappy; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java index 0883e3595..3eec8aa59 100644 --- a/src/main/java/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.swc; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java index 8057ce9c1..d1356964e 100644 --- a/src/main/java/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.swc; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java index 375f6099d..968af9b4c 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java index 1452c0dba..1e60724fb 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java index 8e2af26df..ab961e138 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java index 844ddf395..e676fc753 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java index 607545f9b..0c8391ca8 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java index 6ebe89aae..c226996a6 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java index 030a255d9..6b9e88002 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java index d6c591f67..1ae674ba8 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java index 5001fdeeb..3cfd0cfd2 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java index 720943ff1..a1f56ad51 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java index a9097569c..7e30cb433 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java index 885fc039d..b9075bd27 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java index 35faec1ff..61e9966d4 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java index 150984e68..a284c924b 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java index ae427ade8..d6a44d221 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java index 9e2c0e8f0..9369bd51e 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java index 79e229be1..eecc77dd8 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java index 98090f19b..ad483a60a 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java index 94a180a25..7d9c6eb49 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java index a895658e0..b51b14483 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java index a38de3a50..6ad5bc145 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java index da7aaf327..4e848bd5c 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java index e45361d2d..56b139e62 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java index 785413cec..742d77a25 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java index 1487b1b1c..a5ad7b749 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java index ef643d38e..b8d13b290 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java index e4a231656..335babd69 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java index 6d68e45c7..9a40417ff 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java index 858e67229..a14986937 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java index fd5098f93..f67c88626 100644 --- a/src/main/java/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java index 02252fa3b..c7cbaefe0 100644 --- a/src/main/java/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.war; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/war/WarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/war/WarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java index 38594bde6..469f60852 100644 --- a/src/main/java/org/codehaus/plexus/archiver/war/WarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.war; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java index 9c4c5d6ee..6df9f7437 100644 --- a/src/main/java/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.war; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java index 87a3eef22..d3d77c8e1 100644 --- a/src/main/java/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.xz; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java index f1400955b..6b3f57a74 100644 --- a/src/main/java/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.xz; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java index 07c407ce5..28229ffe8 100644 --- a/src/main/java/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.xz; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java index 76a58b870..eb4311250 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.zip; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java index 41b91bdda..ba60fc034 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zip; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java index 9e693f4d9..828605241 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zip; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java index 93da8de6f..4dffe54c3 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.zstd; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java index 23e675b2b..ac97ff465 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zstd; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java similarity index 92% rename from src/main/java/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java index 83821db40..36e5d2670 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zstd; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiveCreation.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveCreation.java similarity index 95% rename from src/main/java/org/codehaus/plexus/archivers/spi/ArchiveCreation.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ArchiveCreation.java index 4af7dda53..319a764a5 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiveCreation.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveCreation.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; /** * Controls whether an archive is always recreated or only when out of date. diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveEntryMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveEntryMatcher.java new file mode 100644 index 000000000..65fbf5b89 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveEntryMatcher.java @@ -0,0 +1,9 @@ +package org.codehaus.plexus.archivers.config; + +import org.apache.commons.compress.archivers.ArchiveEntry; + +@FunctionalInterface +public interface ArchiveEntryMatcher { + + boolean matches(ArchiveEntry archiveEntry); +} diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java similarity index 50% rename from src/main/java/org/codehaus/plexus/archivers/spi/ArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index 0b82cc92a..240ea8265 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -15,41 +15,35 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; import java.nio.file.Path; import java.nio.file.attribute.FileTime; import java.util.Comparator; +import java.util.function.Consumer; -import org.codehaus.plexus.archiver.ArchivedFileSet; -import org.codehaus.plexus.archiver.ArchivedFileSetSpec; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; -import org.codehaus.plexus.archiver.FileSet; -import org.codehaus.plexus.archiver.FileSetSpec; +import org.codehaus.plexus.archiver.Archiver; /** * Configures content on an archiver without exposing its file set implementations. * * @since 5.0.0 */ -public interface ArchiverConfigurer { - void addFileSet(FileSet fileSet); - - void addFileSet(FileSetSpec fileSetSpec); - - void addArchivedFileSet(ArchivedFileSet fileSet); - - void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec); - +public sealed interface ArchiverConfigurer permits DefaultArchiverConfigurer { + + static ArchiverConfigurer of(Archiver archiver) { + return new DefaultArchiverConfigurer(archiver); + } + + ArchiverConfigurer resource( + ResourceScan scan, + Consumer emit); + void setDestFile(Path destFile); - void setFileMode(UnixPermissions permissions); - - void setDefaultFileMode(UnixPermissions permissions); - - void setDirectoryMode(UnixPermissions permissions); + void setFileMode(FileMode fileMode); - void setDefaultDirectoryMode(UnixPermissions permissions); + void setDirectoryMode(DirectoryMode directoryMode); void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling); @@ -61,19 +55,7 @@ public interface ArchiverConfigurer { void setIgnorePermissions(PermissionHandling permissionHandling); - void setLastModifiedTime(FileTime lastModifiedTime); - - void setFilenameComparator(Comparator filenameComparator); - - void setOverrideUid(int uid); - - void setOverrideUserName(String userName); - - void setOverrideGid(int gid); - - void setOverrideGroupName(String groupName); - - void setUmask(UnixPermissions permissions); + void setUmask(FilePermissions permissions); - void configureReproducibleBuild(FileTime lastModifiedTime); + void configureReproducibleBuild(Consumer reproducibleBuildSpec); } diff --git a/src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java similarity index 88% rename from src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java rename to src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java index 1ef309df2..49319e880 100644 --- a/src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; import java.util.Locale; import java.util.Objects; @@ -31,8 +31,8 @@ private CaseSensitivities() {} public static boolean resolve(CaseSensitivity caseSensitivity) { Objects.requireNonNull(caseSensitivity, "caseSensitivity"); - if (caseSensitivity instanceof FixedCaseSensitivity fixed) { - return fixed.caseSensitive; + if (caseSensitivity instanceof FixedCaseSensitivity cs) { + return cs.caseSensitive(); } String osName = System.getProperty("os.name", "").toLowerCase(Locale.ROOT); diff --git a/src/main/java/org/codehaus/plexus/archiver/CaseSensitivity.java b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java similarity index 84% rename from src/main/java/org/codehaus/plexus/archiver/CaseSensitivity.java rename to src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java index 62c28688a..0b03f3751 100644 --- a/src/main/java/org/codehaus/plexus/archiver/CaseSensitivity.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; /** * Controls whether file set patterns are case-sensitive. @@ -33,12 +33,6 @@ public sealed interface CaseSensitivity permits FixedCaseSensitivity, PlatformDe CaseSensitivity PLATFORM_DEFAULT = new PlatformDefaultCaseSensitivity(); } -final class FixedCaseSensitivity implements CaseSensitivity { - final boolean caseSensitive; - - FixedCaseSensitivity(boolean caseSensitive) { - this.caseSensitive = caseSensitive; - } -} +final record FixedCaseSensitivity(boolean caseSensitive) implements CaseSensitivity {} final class PlatformDefaultCaseSensitivity implements CaseSensitivity {} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiveResourceScan.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiveResourceScan.java new file mode 100644 index 000000000..69c70227a --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiveResourceScan.java @@ -0,0 +1,43 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; + +final class DefaultArchiveResourceScan implements ResourceScan.ArchiveScan { + + private final Path archive; + private ArchiveEntryMatcher matcher; + + DefaultArchiveResourceScan(Path archive) { + this.archive = Objects.requireNonNull(archive, "archive"); + } + + @Override + public DefaultArchiveResourceScan matcher(ArchiveEntryMatcher matcher) { + this.matcher = Objects.requireNonNull(matcher, "matcher"); + return this; + } + + @Override + public Path archive() { + return archive; + } + + ArchiveEntryMatcher matcher() { + return matcher; + } + + DefaultArchivedFileSet toArchivedFileSet() { + DefaultArchivedFileSet fileSet = new DefaultArchivedFileSet(archive.toFile()); + + if (matcher instanceof DefaultPathPatternMatcher resourceMatcher) { + resourceMatcher.applyTo(fileSet); + } else { + throw new UnsupportedOperationException(); + } + + return fileSet; + } +} \ No newline at end of file diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java new file mode 100644 index 000000000..877910661 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -0,0 +1,170 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.nio.file.attribute.FileTime; +import java.nio.file.attribute.PosixFilePermission; +import java.util.Comparator; +import java.util.Objects; +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.ArchivedFileSet; +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.BaseFileSet; +import org.codehaus.plexus.archiver.FileSet; +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; +import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; + +/** + * Applies the configuration to the applied archiver + * + * @since 5.0.0 + */ +final class DefaultArchiverConfigurer implements ArchiverConfigurer { + private final Archiver archiver; + + DefaultArchiverConfigurer(Archiver archiver) { + this.archiver = Objects.requireNonNull(archiver, "archiver"); + } + + @Override + public ArchiverConfigurer resource( + ResourceScan scan, + Consumer emit) { + + if (scan instanceof DefaultDirectoryResourceScan directoryScan) { + DefaultFileSet fileSet = directoryScan.toFileSet(); + + emit.accept(new FileSetResourceEmitConfigurer(fileSet)); + archiver.addFileSet(fileSet); + + return this; + } + + if (scan instanceof DefaultArchiveResourceScan archiveScan) { + DefaultArchivedFileSet fileSet = archiveScan.toArchivedFileSet(); + + emit.accept(new FileSetResourceEmitConfigurer(fileSet)); + archiver.addArchivedFileSet(fileSet); + + return this; + } + + throw new IncompatibleClassChangeError( + "Unsupported ResourceScan implementation: " + + scan.getClass().getName()); + } + + @Override + public void setDestFile(Path destFile) { + archiver.setDestFile(Objects.requireNonNull(destFile, "destFile").toFile()); + } + + @Override + public void setFileMode(FileMode fileMode) { + if(fileMode instanceof OverrideFileMode o) { + archiver.setFileMode(toMode(o.permissions())); + } else if (fileMode instanceof FallbackFileMode f) { + archiver.setDefaultFileMode(toMode(f.permissions())); + } + } + + @Override + public void setDirectoryMode(DirectoryMode directoryMode) { + if(directoryMode instanceof OverrideDirectoryMode o) { + archiver.setDirectoryMode(toMode(o.permissions())); + } else if(directoryMode instanceof FallbackDirectoryMode f) { + archiver.setDefaultDirectoryMode(toMode(f.permissions())); + } + } + + @Override + public void setEmptyDirectoryHandling(EmptyDirectoryHandling handling) { + archiver.setIncludeEmptyDirs(Objects.requireNonNull(handling, "handling") == EmptyDirectoryHandling.INCLUDE); + } + + @Override + public void setDotFileDirectory(Path dotFileDirectory) { + archiver.setDotFileDirectory( + Objects.requireNonNull(dotFileDirectory, "dotFileDirectory").toFile()); + } + + @Override + public void setForced(ArchiveCreation archiveCreation) { + archiver.setForced(Objects.requireNonNull(archiveCreation, "archiveCreation") == ArchiveCreation.ALWAYS); + } + + @Override + public void setDuplicateBehavior(DuplicateHandling duplicateHandling) { + Objects.requireNonNull(duplicateHandling, "duplicateHandling"); + String behavior = duplicateHandling == DuplicateHandling.ADD + ? Archiver.DUPLICATES_ADD + : duplicateHandling == DuplicateHandling.PRESERVE + ? Archiver.DUPLICATES_PRESERVE + : duplicateHandling == DuplicateHandling.SKIP + ? Archiver.DUPLICATES_SKIP + : Archiver.DUPLICATES_FAIL; + archiver.setDuplicateBehavior(behavior); + } + + @Override + public void setIgnorePermissions(PermissionHandling permissionHandling) { + archiver.setIgnorePermissions( + Objects.requireNonNull(permissionHandling, "permissionHandling") == PermissionHandling.IGNORE); + } + + @Override + public void setUmask(FilePermissions permissions) { + archiver.setUmask(toMode(permissions)); + } + + + @Override + public void configureReproducibleBuild(Consumer spec) { + ReproducibleBuildConfigurer configurer = new DefaultReproducibleBuildConfigurer(archiver); + spec.accept(configurer); + } + + private static int toMode(FilePermissions filePermissions) { + if(filePermissions instanceof PosixPermissions permissions) { + int mode = 0; + for (PosixFilePermission permission : + Objects.requireNonNull(permissions, "unixPermissions").permissions()) { + mode |= switch (permission) { + case OWNER_READ -> 0_400; + case OWNER_WRITE -> 0_200; + case OWNER_EXECUTE -> 0_100; + case GROUP_READ -> 0_040; + case GROUP_WRITE -> 0_020; + case GROUP_EXECUTE -> 0_010; + case OTHERS_READ -> 0_004; + case OTHERS_WRITE -> 0_002; + case OTHERS_EXECUTE -> 0_001; + }; + } + return mode; + } else if(filePermissions instanceof ModePermissions permissions) { + return permissions.mode(); + } else { + throw new IncompatibleClassChangeError(); + } + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultDirectoryResourceScan.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultDirectoryResourceScan.java new file mode 100644 index 000000000..a83e0bb75 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultDirectoryResourceScan.java @@ -0,0 +1,46 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; + +final class DefaultDirectoryResourceScan implements ResourceScan.DirectoryScan { + + private final Path directory; + private PathMatcher matcher; + + DefaultDirectoryResourceScan(Path directory) { + this.directory = Objects.requireNonNull(directory, "directory"); + } + + @Override + public DefaultDirectoryResourceScan matcher(PathMatcher matcher) { + this.matcher = Objects.requireNonNull(matcher, "matcher"); + return this; + } + + @Override + public Path directory() { + return directory; + } + + PathMatcher matcher() { + return matcher; + } + + DefaultFileSet toFileSet() { + DefaultFileSet fileSet = new DefaultFileSet(directory.toFile()); + + if (matcher instanceof DefaultPathPatternMatcher resourceMatcher) { + resourceMatcher.applyTo(fileSet); + } else { + fileSet.setFileSelectors(new FileSelector[] { FileSelectors.from(directory, matcher) }); + } + + return fileSet; + } + +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPathPatternMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPathPatternMatcher.java new file mode 100644 index 000000000..421529f28 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPathPatternMatcher.java @@ -0,0 +1,81 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.archivers.config.StandardExcludes; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; + +class DefaultPathPatternMatcher implements PathPatternMatcher { + + private final String[] includes; + private String[] excludes = new String[0]; + private Collection standardExcludes = List.of(); + private CaseSensitivity caseSensitivity; + private FileSelector[] fileSelectors = new FileSelector[0]; + + + private DefaultPathPatternMatcher(String[] includes) { + this.includes = includes.clone(); + } + + static DefaultPathPatternMatcher includes(String... includes) { + return new DefaultPathPatternMatcher(includes); + } + + @Override + public DefaultPathPatternMatcher excludes(String... excludes) { + this.excludes = excludes.clone(); + return this; + } + + @Override + public PathPatternMatcher caseSensitive(CaseSensitivity caseSensitivity) { + this.caseSensitivity = caseSensitivity; + return this; + } + + @Override + public PathPatternMatcher standardExcludes(StandardExcludes.ExcludeMode mode) { + this.standardExcludes = List.of(mode); + return this; + } + + @Override + public PathPatternMatcher standardExcludes(StandardExcludes.ExcludeGroup... groups) { + this.standardExcludes = Arrays.asList(groups); + return this; + } + + DefaultPathPatternMatcher selectedBy(FileSelector... fileSelectors) { + this.fileSelectors = fileSelectors.clone(); + return this; + } + + @Override + public boolean matches(Path path) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean matches(ArchiveEntry archiveEntry) { + throw new UnsupportedOperationException(); + } + + void applyTo(AbstractFileSet fileSet) { + fileSet.setIncludes(includes.clone()); + fileSet.setExcludes(excludes.clone()); + fileSet.setCaseSensitive(CaseSensitivities.resolve(caseSensitivity)); + fileSet.setFileSelectors(fileSelectors.clone()); + + if (standardExcludes.contains(StandardExcludes.NONE)) { + fileSet.usingDefaultExcludes(false); + } else if (standardExcludes.contains(StandardExcludes.PLEXUS)) { + fileSet.usingDefaultExcludes(true); + } + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java new file mode 100644 index 000000000..7996f63d6 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java @@ -0,0 +1,66 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.attribute.FileTime; +import java.util.Comparator; + +import org.codehaus.plexus.archiver.Archiver; + +/** + * Applies the configuration to the applied archiver + * + * @since 5.0.0 + */ +final class DefaultReproducibleBuildConfigurer implements ReproducibleBuildConfigurer { + + private final Archiver archiver; + + DefaultReproducibleBuildConfigurer(Archiver archiver) { + this.archiver = archiver; + } + + @Override + public void setDefaultLastModifiedTime(FileTime fileTime) { + archiver.configureReproducibleBuild(fileTime); + } + + @Override + public void setDefaultUid(int uid) { + archiver.setOverrideUid(uid); + } + + @Override + public void setDefaultUserName(String userName) { + archiver.setOverrideUserName(userName); + } + + @Override + public void setDefaultGid(int gid) { + archiver.setOverrideGid(gid); + } + + @Override + public void setDefaultGroupName(String groupName) { + archiver.setOverrideGroupName(groupName); + } + + @Override + public void setFilenameComparator(Comparator filenameComparator) { + archiver.setFilenameComparator(filenameComparator); + } +} diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultUnArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultUnArchiverConfigurer.java similarity index 86% rename from src/main/java/org/codehaus/plexus/archivers/internal/DefaultUnArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultUnArchiverConfigurer.java index 4c4ea593a..a51cfe7a2 100644 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultUnArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultUnArchiverConfigurer.java @@ -15,23 +15,25 @@ * */ -package org.codehaus.plexus.archivers.internal; +package org.codehaus.plexus.archivers.config; import java.nio.file.Path; import java.util.List; import java.util.Objects; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.ExistingFileHandling; -import org.codehaus.plexus.archivers.spi.PermissionHandling; -import org.codehaus.plexus.archivers.spi.UnArchiverConfigurer; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; -public final class DefaultUnArchiverConfigurer implements UnArchiverConfigurer { +/** + * Applies the configuration to the applied unarchiver + * + * @Since 5.0.0 + */ +final class DefaultUnArchiverConfigurer implements UnArchiverConfigurer { private final UnArchiver unarchiver; - public DefaultUnArchiverConfigurer(UnArchiver unarchiver) { + DefaultUnArchiverConfigurer(UnArchiver unarchiver) { this.unarchiver = Objects.requireNonNull(unarchiver, "unarchiver"); } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DirectoryMode.java b/src/main/java17/org/codehaus/plexus/archivers/config/DirectoryMode.java new file mode 100644 index 000000000..74d6fe377 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DirectoryMode.java @@ -0,0 +1,49 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Objects; + +/** + * Specifies how permissions are selected for emitted archive entries. + * + * @since 5.0.0 + */ +public sealed interface DirectoryMode + permits InheritedDirectoryMode, OverrideDirectoryMode, FallbackDirectoryMode { + + /** + * Preserve source permissions when available. + * Otherwise, use the archiver's built-in fallback. + * + * This is the default policy. + */ + DirectoryMode INHERIT = new InheritedDirectoryMode(); + + /** + * Replace source permissions with the supplied permissions. + */ + static DirectoryMode override(FilePermissions permissions) { + return new OverrideDirectoryMode(permissions); + } + + /** + * Preserve source permissions when available. + * Use the supplied permissions only when the source has none. + */ + static DirectoryMode fallback(FilePermissions permissions) { + return new FallbackDirectoryMode(permissions); + } +} + +record InheritedDirectoryMode() implements DirectoryMode {} + +record OverrideDirectoryMode(FilePermissions permissions) implements DirectoryMode { + OverrideDirectoryMode { + Objects.requireNonNull(permissions, "permissions"); + } +} + +record FallbackDirectoryMode(FilePermissions permissions) implements DirectoryMode { + FallbackDirectoryMode { + Objects.requireNonNull(permissions, "permissions"); + } +} \ No newline at end of file diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/DuplicateHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/DuplicateHandling.java similarity index 96% rename from src/main/java/org/codehaus/plexus/archivers/spi/DuplicateHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DuplicateHandling.java index 244ef9360..436152e1e 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/DuplicateHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DuplicateHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; import org.codehaus.plexus.archiver.Archiver; diff --git a/src/main/java/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/EmptyDirectoryHandling.java similarity index 96% rename from src/main/java/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/EmptyDirectoryHandling.java index 93d6b47b3..9ca987c01 100644 --- a/src/main/java/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/EmptyDirectoryHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; /** * Controls whether empty directories are included in an archive. diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/ExistingFileHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/ExistingFileHandling.java similarity index 80% rename from src/main/java/org/codehaus/plexus/archivers/spi/ExistingFileHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ExistingFileHandling.java index eb1d1ee1f..74754545a 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ExistingFileHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ExistingFileHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; /** * Controls how extraction handles existing destination files. @@ -23,8 +23,8 @@ * @since 5.0.0 */ public sealed interface ExistingFileHandling permits FixedExistingFileHandling { - ExistingFileHandling OVERWRITE = new FixedExistingFileHandling(true); - ExistingFileHandling KEEP_NEWER = new FixedExistingFileHandling(false); + public static final ExistingFileHandling OVERWRITE = new FixedExistingFileHandling(true); + public static final ExistingFileHandling KEEP_NEWER = new FixedExistingFileHandling(false); } final class FixedExistingFileHandling implements ExistingFileHandling { diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileInfoMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileInfoMatcher.java new file mode 100644 index 000000000..59eaa28da --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileInfoMatcher.java @@ -0,0 +1,8 @@ +package org.codehaus.plexus.archivers.config; + +import org.codehaus.plexus.components.io.fileselectors.FileInfo; + +public interface FileInfoMatcher { + + boolean matches(FileInfo fileInfo); +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileMode.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileMode.java new file mode 100644 index 000000000..b1cf70720 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileMode.java @@ -0,0 +1,49 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Objects; + +/** + * Specifies how permissions are selected for emitted archive entries. + * + * @since 5.0.0 + */ +public sealed interface FileMode + permits InheritedFileMode, OverrideFileMode, FallbackFileMode { + + /** + * Preserve source permissions when available. + * Otherwise, use the archiver's built-in fallback. + * + * This is the default policy. + */ + FileMode INHERIT = new InheritedFileMode(); + + /** + * Replace source permissions with the supplied permissions. + */ + static FileMode override(FilePermissions permissions) { + return new OverrideFileMode(permissions); + } + + /** + * Preserve source permissions when available. + * Use the supplied permissions only when the source has none. + */ + static FileMode fallback(FilePermissions permissions) { + return new FallbackFileMode(permissions); + } +} + +record InheritedFileMode() implements FileMode {} + +record OverrideFileMode(FilePermissions permissions) implements FileMode { + OverrideFileMode { + Objects.requireNonNull(permissions, "permissions"); + } +} + +record FallbackFileMode(FilePermissions permissions) implements FileMode { + FallbackFileMode { + Objects.requireNonNull(permissions, "permissions"); + } +} \ No newline at end of file diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java new file mode 100644 index 000000000..de1a8382e --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java @@ -0,0 +1,114 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.Objects; +import java.util.Set; + +/** + * Represents archive file permissions in a form suitable for archiver configuration. + *

+ * This type provides a small, public abstraction over the underlying permission representation so consumers can + * configure archive entry permissions using either symbolic POSIX-style permissions or numeric mode values. + *

+ * + * @since 5.0.0 + */ +public sealed abstract class FilePermissions permits PosixPermissions, ModePermissions { + + FilePermissions() {} + + /** + * Creates permissions from a set of POSIX file permissions. + * + * @param permissions the POSIX permissions + * @return a permission representation for archiver configuration + */ + public static FilePermissions of(Set permissions) { + return new PosixPermissions(permissions); + } + + /** + * Parses a POSIX symbolic permission string. + *

+ * The expected format is the standard symbolic representation understood by + * {@link java.nio.file.attribute.PosixFilePermissions#fromString(String)}, such as + * {@code rw-r--r--} or {@code rwxr-xr-x}. + *

+ * + * @param symbolicPermissions the POSIX symbolic permission string + * @return a permission representation for archiver configuration + * @throws IllegalArgumentException if the string is not a valid POSIX symbolic permission value + */ + public static FilePermissions parse(String symbolicPermissions) { + return new PosixPermissions(PosixFilePermissions.fromString(symbolicPermissions)); + } + + /** + * Creates permissions from a numeric archive mode. + *

+ * The mode should be expressed using the familiar octal form, for example {@code 0644} or {@code 0755}. + *

+ * + * @param mode the numeric archive mode + * @return a permission representation for archiver configuration + */ + public static FilePermissions ofMode(int mode) { + return new ModePermissions(mode); + } +} + +/** + * POSIX-style permissions represented as a set of {@link PosixFilePermission} values. + *

+ * This representation is useful when consumers already have permissions in Java NIO form. + *

+ */ +final class PosixPermissions extends FilePermissions { + final Set permissions; + + PosixPermissions(Set permissions) { + this.permissions = Set.copyOf(Objects.requireNonNull(permissions, "permissions")); + } + + public Set permissions() { + return permissions; + } +} + +/** + * Numeric archive permissions represented as a Unix-style mode value. + *

+ * The mode is typically expressed using the familiar octal notation, such as {@code 0644} or {@code 0755}. + * This is the most convenient form for archive configuration because archive tools usually work with mode bits + * rather than full filesystem permission models. + *

+ */ +final class ModePermissions extends FilePermissions { + final int mode; + + public ModePermissions(int mode) { + this.mode = mode; + } + + int mode() { + return mode; + } +} + diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileSelectors.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileSelectors.java new file mode 100644 index 000000000..261911edb --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileSelectors.java @@ -0,0 +1,20 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; + +import org.codehaus.plexus.components.io.fileselectors.FileSelector; + +final class FileSelectors { + + private FileSelectors() { + } + + static FileSelector from( + Path directory, + PathMatcher matcher) { + + return fileInfo -> matcher.matches( + Path.of(fileInfo.getName())); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileSetResourceEmitConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetResourceEmitConfigurer.java new file mode 100644 index 000000000..ac21fe544 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetResourceEmitConfigurer.java @@ -0,0 +1,44 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +final class FileSetResourceEmitConfigurer implements ResourceEmitConfigurer { + + private final AbstractFileSet fileSet; + + public FileSetResourceEmitConfigurer(AbstractFileSet fileSet) { + this.fileSet = fileSet; + } + + @Override + public void prefix(String prefix) { + fileSet.setPrefix(prefix); + } + + @Override + public void setEmptyDirectoryHandling(EmptyDirectoryHandling handling) { + fileSet.setIncludingEmptyDirectories( + Objects.requireNonNull(handling, "handling") + == EmptyDirectoryHandling.INCLUDE); + } + + @Override + public void setFileMappers(Collection fileMappers) { + List mappers = List.copyOf( + Objects.requireNonNull(fileMappers, "fileMappers")); + + fileSet.setFileMappers(mappers.toArray(FileMapper[]::new)); + } + + @Override + public void setStreamTransformer(InputStreamTransformer transformer) { + fileSet.setStreamTransformer( + Objects.requireNonNull(transformer, "transformer")); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/PathPatternMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/PathPatternMatcher.java new file mode 100644 index 000000000..426850b98 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PathPatternMatcher.java @@ -0,0 +1,20 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.PathMatcher; + +public interface PathPatternMatcher extends PathMatcher, ArchiveEntryMatcher { + + static PathPatternMatcher includes(String... includes) { + return DefaultPathPatternMatcher.includes(includes); + } + + PathPatternMatcher excludes(String... excludes); + + PathPatternMatcher standardExcludes(StandardExcludes.ExcludeMode mode); + + PathPatternMatcher standardExcludes(StandardExcludes.ExcludeGroup... groups); + + PathPatternMatcher caseSensitive(CaseSensitivity caseSensitivity); + + +} diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/PermissionHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/PermissionHandling.java similarity index 95% rename from src/main/java/org/codehaus/plexus/archivers/spi/PermissionHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/PermissionHandling.java index cac175871..fa1ca9206 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/PermissionHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PermissionHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; /** * Controls whether source permissions are preserved. diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java new file mode 100644 index 000000000..d48bf83eb --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java @@ -0,0 +1,63 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.codehaus.plexus.archivers.config; + +import java.nio.file.attribute.FileTime; +import java.util.Comparator; + +/** + * Configures reproducible build content on an archiver without exposing its implementations. + * + * NOTE: Based on {@link AbstractArchiver#configureReproducibleBuild(FileTime)} this could be extended with more options. + * + * The default-prefix is used to make clear this is applied to all non-explicit entries. This leaves room to extend this class with different values for explicit entries + * + * @since 5.0.0 + */ +public interface ReproducibleBuildConfigurer { + + /** + * Sets the default last modified time for all archive entries. + */ + void setDefaultLastModifiedTime(FileTime fileTime); + + /** + * Sets the default uid for all archive entries. + */ + void setDefaultUid(int uid); + + /** + * Sets the default username for all archive entries. + */ + void setDefaultUserName(String userName); + + /** + * Sets the default gid for all archive entries. + */ + void setDefaultGid(int gid); + + /** + * Sets the default group name for all archive entries. + */ + void setDefaultGroupName(String groupName); + + /** + * Sets the comparator used to sort filenames when scanning directories. + */ + void setFilenameComparator(Comparator filenameComparator); +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ResourceCollectionResourceEmitConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceCollectionResourceEmitConfigurer.java new file mode 100644 index 000000000..b7b0953e1 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceCollectionResourceEmitConfigurer.java @@ -0,0 +1,44 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +final class ResourceCollectionResourceEmitConfigurer implements ResourceEmitConfigurer { + + private final AbstractFileSet fileSet; + + public ResourceCollectionResourceEmitConfigurer(AbstractFileSet fileSet) { + this.fileSet = fileSet; + } + + @Override + public void prefix(String prefix) { + fileSet.setPrefix(prefix); + } + + @Override + public void setEmptyDirectoryHandling(EmptyDirectoryHandling handling) { + fileSet.setIncludingEmptyDirectories( + Objects.requireNonNull(handling, "handling") + == EmptyDirectoryHandling.INCLUDE); + } + + @Override + public void setFileMappers(Collection fileMappers) { + List mappers = List.copyOf( + Objects.requireNonNull(fileMappers, "fileMappers")); + + fileSet.setFileMappers(mappers.toArray(FileMapper[]::new)); + } + + @Override + public void setStreamTransformer(InputStreamTransformer transformer) { + fileSet.setStreamTransformer( + Objects.requireNonNull(transformer, "transformer")); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ResourceEmitConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceEmitConfigurer.java new file mode 100644 index 000000000..349ba7d67 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceEmitConfigurer.java @@ -0,0 +1,17 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Collection; + +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +public interface ResourceEmitConfigurer { + + void prefix(String prefix); + + void setEmptyDirectoryHandling(EmptyDirectoryHandling handling); + + void setFileMappers(Collection fileMappers); + + void setStreamTransformer(InputStreamTransformer transformer); +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ResourceScan.java b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceScan.java new file mode 100644 index 000000000..894e177ee --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceScan.java @@ -0,0 +1,27 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; + +public sealed interface ResourceScan { + + static DirectoryScan fromDirectory(Path directory) { + return new DefaultDirectoryResourceScan(directory); + } + + static ArchiveScan fromArchive(Path archive) { + return new DefaultArchiveResourceScan(archive); + } + + sealed interface DirectoryScan extends ResourceScan permits DefaultDirectoryResourceScan { + Path directory(); + + DirectoryScan matcher(PathMatcher matcher); + } + + sealed interface ArchiveScan extends ResourceScan permits DefaultArchiveResourceScan { + Path archive(); + + ArchiveScan matcher(ArchiveEntryMatcher matcher); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/StandardExcludes.java b/src/main/java17/org/codehaus/plexus/archivers/config/StandardExcludes.java new file mode 100644 index 000000000..9aeff08f3 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/StandardExcludes.java @@ -0,0 +1,16 @@ +package org.codehaus.plexus.archivers.config; + +public sealed interface StandardExcludes { + + // org.codehaus.plexus.util.AbstractScanner.DEFAULTEXCLUDES + ExcludeGroup PLEXUS = new PredefinedExcludes("plexus-utils"); + + ExcludeMode NONE = new NamedExcludeMode("none"); + + sealed interface ExcludeMode extends StandardExcludes permits NamedExcludeMode {} + + sealed interface ExcludeGroup extends StandardExcludes permits PredefinedExcludes {} +} +record PredefinedExcludes(String name) implements StandardExcludes.ExcludeGroup {} + +record NamedExcludeMode(String name) implements StandardExcludes.ExcludeMode {} \ No newline at end of file diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/SymbolicLinkHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java similarity index 80% rename from src/main/java/org/codehaus/plexus/archivers/spi/SymbolicLinkHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java index 6843d14ab..49a180845 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/SymbolicLinkHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; /** * Controls whether a filesystem resource collection follows symbolic links. @@ -24,13 +24,13 @@ */ public sealed interface SymbolicLinkHandling permits FixedSymbolicLinkHandling { SymbolicLinkHandling FOLLOW = new FixedSymbolicLinkHandling(true); - SymbolicLinkHandling DO_NOT_FOLLOW = new FixedSymbolicLinkHandling(false); + SymbolicLinkHandling PRESERVE = new FixedSymbolicLinkHandling(false); } final class FixedSymbolicLinkHandling implements SymbolicLinkHandling { - final boolean follow; + final boolean following; - FixedSymbolicLinkHandling(boolean follow) { - this.follow = follow; + FixedSymbolicLinkHandling(boolean following) { + this.following = following; } } diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/UnArchiverConfigurer.java similarity index 86% rename from src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/UnArchiverConfigurer.java index 92fcbf217..f28c4df69 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/UnArchiverConfigurer.java @@ -15,11 +15,12 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; import java.nio.file.Path; import java.util.List; +import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; @@ -29,6 +30,11 @@ * @since 5.0.0 */ public interface UnArchiverConfigurer { + + static UnArchiverConfigurer of(UnArchiver unArchiver) { + return new DefaultUnArchiverConfigurer(unArchiver); + } + void setSource(Path source); void setDestinationDirectory(Path destinationDirectory); diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java similarity index 87% rename from src/main/java/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java index ee0d7d313..492d1f342 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java @@ -15,13 +15,14 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; +import java.nio.file.Path; import java.util.Objects; import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.internal.DefaultArchiverConfigurer; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; /** * Base implementation that keeps unconfigured archiver creation internal to service providers. @@ -35,7 +36,7 @@ public abstract non-sealed class AbstractArchiverProvider implements ArchiverPro @Override public final Archiver newArchiver(Consumer configurer) { Archiver archiver = createArchiver(); - Objects.requireNonNull(configurer, "configurer").accept(new DefaultArchiverConfigurer(archiver)); + Objects.requireNonNull(configurer, "configurer").accept(ArchiverConfigurer.of(archiver)); return archiver; } } diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java similarity index 63% rename from src/main/java/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java index 98cef8df1..c119a863b 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java @@ -15,12 +15,8 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; -import java.util.Objects; -import java.util.function.Consumer; - -import org.codehaus.plexus.archivers.internal.DefaultPlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -34,11 +30,7 @@ public abstract non-sealed class AbstractPlexusIoResourceCollectionProvider protected abstract PlexusIoResourceCollection createResourceCollection(); @Override - public final PlexusIoResourceCollection newPlexusIoResourceCollection( - Consumer configurer) { - PlexusIoResourceCollection collection = createResourceCollection(); - Objects.requireNonNull(configurer, "configurer") - .accept(new DefaultPlexusIoResourceCollectionConfigurer(collection)); - return collection; + public final PlexusIoResourceCollection create() { + return createResourceCollection(); } } diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractUnArchiverProvider.java similarity index 83% rename from src/main/java/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/AbstractUnArchiverProvider.java index c8fa5dab2..fed91e13d 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractUnArchiverProvider.java @@ -15,13 +15,13 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.Objects; import java.util.function.Consumer; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.internal.DefaultUnArchiverConfigurer; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; /** * Base implementation that keeps unconfigured unarchiver creation internal to service providers. @@ -33,9 +33,9 @@ public abstract non-sealed class AbstractUnArchiverProvider implements UnArchive protected abstract UnArchiver createUnarchiver(); @Override - public final UnArchiver newUnarchiver(Consumer configurer) { + public final UnArchiver newUnArchiver(Consumer configurer) { UnArchiver unarchiver = createUnarchiver(); - Objects.requireNonNull(configurer, "configurer").accept(new DefaultUnArchiverConfigurer(unarchiver)); + Objects.requireNonNull(configurer, "configurer").accept(UnArchiverConfigurer.of(unarchiver)); return unarchiver; } } diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java similarity index 89% rename from src/main/java/org/codehaus/plexus/archivers/spi/ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java index 298ebbb4f..6a3b1f3b1 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java @@ -15,11 +15,13 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; +import java.nio.file.Path; import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; /** * Service provider for a named archive format. Archivers are exposed only after their initial configuration has been diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java similarity index 67% rename from src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java index 12edd011e..13cccedc2 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java @@ -15,10 +15,13 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.function.Consumer; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archiver.manager.PlexusIoResourceCollectionFactory; +import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -26,9 +29,8 @@ * * @since 5.0.0 */ -public sealed interface PlexusIoResourceCollectionProvider permits AbstractPlexusIoResourceCollectionProvider { +public sealed interface PlexusIoResourceCollectionProvider extends PlexusIoResourceCollectionFactory permits AbstractPlexusIoResourceCollectionProvider { String getName(); - PlexusIoResourceCollection newPlexusIoResourceCollection(Consumer configurer); } diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/UnArchiverProvider.java similarity index 83% rename from src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/UnArchiverProvider.java index ef2f8bb2c..bd2a0b246 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/UnArchiverProvider.java @@ -15,11 +15,12 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.function.Consumer; import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; /** * Service provider for a named archive extraction format. @@ -30,5 +31,5 @@ public sealed interface UnArchiverProvider permits AbstractUnArchiverProvider { String getName(); - UnArchiver newUnarchiver(Consumer configurer); + UnArchiver newUnArchiver(Consumer configurer); } diff --git a/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.ArchiverProvider b/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.ArchiverProvider similarity index 100% rename from src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.ArchiverProvider rename to src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.ArchiverProvider diff --git a/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider b/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider similarity index 100% rename from src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider rename to src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider diff --git a/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.UnArchiverProvider b/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.UnArchiverProvider similarity index 100% rename from src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.UnArchiverProvider rename to src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.UnArchiverProvider diff --git a/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java index 938c9f7ae..5f899aaf3 100644 --- a/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java @@ -147,7 +147,7 @@ void fileSetSpecFollowsSymbolicLinksOnRequest() throws Exception { DirectoryArchiver archiver = (DirectoryArchiver) lookup(Archiver.class, "dir"); File dummyContent = getTestFile("src/test/resources/symlinks/src"); - archiver.addFileSet(FileSet.of(dummyContent.toPath()).symbolicLinks(SymbolicLinkHandling.FOLLOW)); + archiver.addFileSet(new DefaultFileSet(dummyContent).followingSymLinks(true)); final File archiveFile = new File("target/output/dirarchiver-spec-followed-symlink"); archiveFile.mkdirs(); archiver.setDestFile(archiveFile); diff --git a/src/test/java/org/codehaus/plexus/archiver/TestSupport.java b/src/test/java/org/codehaus/plexus/archiver/TestSupport.java index 168a05acd..0b2d65d31 100644 --- a/src/test/java/org/codehaus/plexus/archiver/TestSupport.java +++ b/src/test/java/org/codehaus/plexus/archiver/TestSupport.java @@ -2,6 +2,7 @@ import java.io.File; import java.nio.file.Path; +import java.nio.file.Paths; import org.eclipse.sisu.launch.InjectedTest; import org.junit.jupiter.api.AfterEach; @@ -24,7 +25,7 @@ public void tearDown() throws Exception { } private static Path basedir() { - return Path.of(System.getProperty("basedir", (new File("")).getAbsolutePath())); + return Paths.get(System.getProperty("basedir", (new File("")).getAbsolutePath())); } protected static File getTestFile(final String path) { diff --git a/src/test/java/org/codehaus/plexus/archiver/jar/BaseJarArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/jar/BaseJarArchiverTest.java index 51f0b1495..832b76299 100644 --- a/src/test/java/org/codehaus/plexus/archiver/jar/BaseJarArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/jar/BaseJarArchiverTest.java @@ -19,7 +19,7 @@ import java.io.File; import java.io.InputStream; import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Calendar; import java.util.Enumeration; import java.util.Locale; @@ -63,7 +63,7 @@ void createJar() throws Exception { ZipEntry classFileEntry = resultingArchive.getEntry("com/example/app/Main.class"); InputStream resultingClassFile = resultingArchive.getInputStream(classFileEntry); InputStream originalClassFile = - Files.newInputStream(Path.of("src/test/resources/java-classes/com/example/app/Main.class")); + Files.newInputStream(Paths.get("src/test/resources/java-classes/com/example/app/Main.class")); assertTrue(IOUtil.contentEquals(originalClassFile, resultingClassFile)); } diff --git a/src/test/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverTest.java index 023061297..769f86f72 100644 --- a/src/test/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverTest.java @@ -18,7 +18,7 @@ import java.io.File; import java.io.InputStream; -import java.lang.module.ModuleDescriptor; +import java.lang.reflect.Method; import java.nio.file.attribute.FileTime; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -32,8 +32,11 @@ import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledIf; +import org.junit.jupiter.api.condition.EnabledIf; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; class JarToolModularJarArchiverTest extends BaseJarArchiverTest { @@ -57,6 +60,7 @@ void setup() throws Exception { * Verify that the main class and the version are properly set for a modular JAR file. */ @Test + @EnabledIf("modulesAreSupported") void modularJarWithMainClassAndVersion() throws Exception { archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.setModuleVersion("1.0.0"); @@ -75,6 +79,7 @@ void modularJarWithMainClassAndVersion() throws Exception { * value is overridden */ @Test + @EnabledIf("modulesAreSupported") void modularJarWithManifestAndModuleMainClass() throws Exception { archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); Manifest manifest = new Manifest(); @@ -96,6 +101,7 @@ void modularJarWithManifestAndModuleMainClass() throws Exception { * the manifest main class attribute (if present) is used instead */ @Test + @EnabledIf("modulesAreSupported") void modularJarWithManifestMainClassAttribute() throws Exception { archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); Manifest manifest = new Manifest(); @@ -114,6 +120,7 @@ void modularJarWithManifestMainClassAttribute() throws Exception { * Verify that a modular JAR file is created even when no additional attributes are set. */ @Test + @EnabledIf("modulesAreSupported") void modularJar() throws Exception { archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.createArchive(); @@ -126,6 +133,7 @@ void modularJar() throws Exception { * Verify that exception is thrown when the modular JAR is not valid. */ @Test + @EnabledIf("modulesAreSupported") void invalidModularJar() throws Exception { archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); // Not a valid version @@ -134,10 +142,30 @@ void invalidModularJar() throws Exception { assertThrows(ArchiverException.class, () -> archiver.createArchive()); } + /* + * Verify that modular JAR files could be created even + * if the Java version does not support modules. + */ + @Test + @DisabledIf("modulesAreSupported") + void modularJarPriorJava9() throws Exception { + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); + archiver.setModuleVersion("1.0.0"); + archiver.setModuleMainClass("com.example.app.Main"); + + archiver.createArchive(); + + // verify that the modular jar is created + try (ZipFile resultingArchive = new ZipFile(archiver.getDestFile())) { + assertNotNull(resultingArchive.getEntry("module-info.class")); + } + } + /* * Verify that the compression flag is respected. */ @Test + @EnabledIf("modulesAreSupported") void noCompression() throws Exception { archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.setCompress(false); @@ -161,6 +189,7 @@ void noCompression() throws Exception { * is kept after it is updated to modular JAR file. */ @Test + @EnabledIf("modulesAreSupported") void compression() throws Exception { archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.addFile(new File("src/test/jars/test.jar"), "META-INF/lib/test.jar"); @@ -186,6 +215,7 @@ void compression() throws Exception { * Verify that a module descriptor in the versioned area is handled correctly. */ @Test + @EnabledIf("modulesAreSupported") void modularMultiReleaseJar() throws Exception { // Add two module-info.class, one on the root and one on the multi-release dir. archiver.addFile( @@ -271,11 +301,35 @@ private void assertModuleDescriptor( String expectedMainClass, String... expectedPackages) throws Exception { - ModuleDescriptor moduleDescriptor = ModuleDescriptor.read(moduleDescriptorInputStream); + // ModuleDescriptor methods are available from Java 9 so let's get by reflection + Class moduleDescriptorClass = Class.forName("java.lang.module.ModuleDescriptor"); + Class optionalClass = Class.forName("java.util.Optional"); + Method readMethod = moduleDescriptorClass.getMethod("read", InputStream.class); + Method mainClassMethod = moduleDescriptorClass.getMethod("mainClass"); + Method rawVersionMethod = moduleDescriptorClass.getMethod("rawVersion"); + Method packagesMethod = moduleDescriptorClass.getMethod("packages"); + Method isPresentMethod = optionalClass.getMethod("isPresent"); + Method getMethod = optionalClass.getMethod("get"); + + // Read the module from the input stream + Object moduleDescriptor = readMethod.invoke(null, moduleDescriptorInputStream); + + // Get the module main class + Object mainClassOptional = mainClassMethod.invoke(moduleDescriptor); + String actualMainClass = null; + if ((boolean) isPresentMethod.invoke(mainClassOptional)) { + actualMainClass = (String) getMethod.invoke(mainClassOptional); + } - String actualMainClass = moduleDescriptor.mainClass().orElse(null); - String actualVersion = moduleDescriptor.rawVersion().orElse(null); - Set actualPackagesSet = moduleDescriptor.packages(); + // Get the module version + Object versionOptional = rawVersionMethod.invoke(moduleDescriptor); + String actualVersion = null; + if ((boolean) isPresentMethod.invoke(versionOptional)) { + actualVersion = (String) getMethod.invoke(versionOptional); + } + + // Get the module packages + Set actualPackagesSet = (Set) packagesMethod.invoke(moduleDescriptor); Set expectedPackagesSet = new HashSet<>(Arrays.asList(expectedPackages)); assertEquals(expectedMainClass, actualMainClass); @@ -295,4 +349,17 @@ private void assertManifestMainClass(File jarFile, String expectedMainClass) thr assertEquals(expectedMainClass, actualManifestMainClass); } } + + /* + * Returns true if the current version of Java does support modules. + */ + private boolean modulesAreSupported() { + try { + Class.forName("java.lang.module.ModuleDescriptor"); + } catch (ClassNotFoundException e) { + return false; + } + + return true; + } } diff --git a/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java b/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java index d61ee2caa..861a9fb7e 100644 --- a/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java @@ -31,7 +31,6 @@ import org.codehaus.plexus.archiver.TestSupport; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.util.DefaultFileSet; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -168,33 +167,6 @@ void lookupResourceCollection(String resourceName) throws Exception { assertThat(resourceCollection).isNotNull(); } - @Test - void configuredLookups() throws Exception { - ArchiverManager manager = lookup(ArchiverManager.class); - File archiveFile = getTestFile("target/configured-manager/archive.zip"); - File outputDirectory = getTestFile("target/configured-manager/output"); - - ArchiverFactory archiverFactory = manager.getArchiverFactory("zip"); - Archiver archiver = archiverFactory.create(configurer -> configurer.setDestFile(archiveFile.toPath())); - Archiver secondArchiver = archiverFactory.create(configurer -> {}); - UnArchiver unarchiver = manager.getUnArchiverFactory(archiveFile).create(configurer -> { - configurer.setSource(archiveFile.toPath()); - configurer.setDestinationDirectory(outputDirectory.toPath()); - }); - AbstractPlexusIoArchiveResourceCollection resourceCollection = (AbstractPlexusIoArchiveResourceCollection) - manager.getResourceCollectionFactory(archiveFile).create(configurer -> { - configurer.setSource(archiveFile.toPath()); - configurer.setPrefix("content/"); - }); - - assertThat(archiver.getDestFile()).isEqualTo(archiveFile); - assertThat(secondArchiver).isNotSameAs(archiver); - assertThat(unarchiver.getSourceFile()).isEqualTo(archiveFile); - assertThat(unarchiver.getDestDirectory()).isEqualTo(outputDirectory); - assertThat(resourceCollection.getFile()).isEqualTo(archiveFile); - assertThat(resourceCollection.getPrefix()).isEqualTo("content/"); - } - @Test void lookupUnknownArchiver() { ArchiverManager manager = lookup(ArchiverManager.class); diff --git a/src/test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java b/src/test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java deleted file mode 100644 index e383f2688..000000000 --- a/src/test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.spi; - -import java.lang.reflect.Modifier; -import java.nio.charset.StandardCharsets; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.List; - -import org.codehaus.plexus.archiver.CaseSensitivity; -import org.codehaus.plexus.archiver.DefaultExcludes; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; -import org.codehaus.plexus.archiver.gzip.PlexusIoGzipResourceCollectionProvider; -import org.codehaus.plexus.archiver.resources.PlexusIoFileResourceCollectionProvider; -import org.codehaus.plexus.archiver.zip.PlexusArchiverZipFileResourceCollectionProvider; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection; -import org.codehaus.plexus.components.io.resources.PlexusIoCompressedFileResourceCollection; -import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import static org.assertj.core.api.Assertions.assertThat; - -class PlexusIoResourceCollectionProviderTest { - - @Test - void exposesOnlyConfiguredCreation() { - assertThat(PlexusIoResourceCollectionProvider.class.getPermittedSubclasses()) - .containsExactly(AbstractPlexusIoResourceCollectionProvider.class); - assertThat(Arrays.stream(PlexusIoResourceCollectionProvider.class.getMethods()) - .filter(method -> method.getName().equals("newPlexusIoResourceCollection")) - .map(method -> method.getParameterCount())) - .containsExactly(1); - assertThat(Arrays.stream(AbstractPlexusIoResourceCollectionProvider.class.getMethods()) - .map(method -> method.getName())) - .doesNotContain("create"); - assertThat(Arrays.stream(PlexusIoResourceCollectionConfigurer.class.getMethods()) - .filter(method -> Modifier.isStatic(method.getModifiers()))) - .isEmpty(); - } - - @Test - void configuresArchiveResourceCollection(@TempDir Path directory) { - Path source = directory.resolve("source.zip"); - - AbstractPlexusIoResourceCollection collection = (AbstractPlexusIoResourceCollection) - new PlexusArchiverZipFileResourceCollectionProvider().newPlexusIoResourceCollection(configurer -> { - configurer.setSource(source); - configurer.setPrefix("content/"); - configurer.setIncludes(List.of("**/*.txt")); - configurer.setExcludes(List.of("**/ignored.txt")); - configurer.setCaseSensitivity(CaseSensitivity.INSENSITIVE); - configurer.setDefaultExcludes(DefaultExcludes.IGNORE); - configurer.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); - configurer.setEncoding(StandardCharsets.UTF_8); - }); - - assertThat(((AbstractPlexusIoArchiveResourceCollection) collection).getFile()) - .isEqualTo(source.toFile()); - assertThat(collection.getPrefix()).isEqualTo("content/"); - assertThat(collection.getIncludes()).containsExactly("**/*.txt"); - assertThat(collection.getExcludes()).containsExactly("**/ignored.txt"); - assertThat(collection.isCaseSensitive()).isFalse(); - assertThat(collection.isUsingDefaultExcludes()).isFalse(); - assertThat(collection.isIncludingEmptyDirectories()).isFalse(); - } - - @Test - void configuresFilesystemResourceCollection(@TempDir Path directory) { - PlexusIoFileResourceCollection collection = (PlexusIoFileResourceCollection) - new PlexusIoFileResourceCollectionProvider().newPlexusIoResourceCollection(configurer -> { - configurer.setSource(directory); - configurer.setSymbolicLinkHandling(SymbolicLinkHandling.DO_NOT_FOLLOW); - }); - - assertThat(collection.getBaseDir()).isEqualTo(directory.toFile()); - assertThat(collection.isFollowingSymLinks()).isFalse(); - } - - @Test - void configuresCompressedResourceCollectionSource(@TempDir Path directory) { - Path source = directory.resolve("source.gz"); - - PlexusIoCompressedFileResourceCollection collection = - (PlexusIoCompressedFileResourceCollection) new PlexusIoGzipResourceCollectionProvider() - .newPlexusIoResourceCollection(configurer -> configurer.setSource(source)); - - assertThat(collection.getFile()).isEqualTo(source.toFile()); - } -}