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 27ca7964d..10ef83353 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,6 @@ - 17 1.7.36 1.1.0 2026-06-08T20:12:28Z @@ -210,4 +209,109 @@ + + + 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 + + + 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 99% 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..4e469bea8 100644 --- a/src/test/java/org/codehaus/plexus/archiver/manager/CdiFactoryTest.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java @@ -28,7 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat; -class CdiFactoryTest { +class CdiFactoryIT { @Test void createsConfiguredArchivers(@TempDir Path directory) { 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 99% 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 457414076..692f04692 100644 --- a/src/test/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerTest.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java @@ -65,7 +65,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() { diff --git a/src/test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java similarity index 87% rename from src/test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java rename to src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java index fab311a20..b448b5472 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java @@ -27,18 +27,25 @@ 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.ArchivedFileSetSpec; +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.DefaultExcludes; +import org.codehaus.plexus.archivers.config.DuplicateHandling; +import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.FileSetSpec; +import org.codehaus.plexus.archivers.config.PermissionHandling; +import org.codehaus.plexus.archivers.config.UnixPermissions; 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,7 +58,12 @@ 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 @@ -59,7 +71,7 @@ void configuresNewArchiverWithoutExposingFileSetImplementations(@TempDir Path di CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.of(directory) + Archiver actual = provider.newArchiver(configurer -> configurer.addFileSetFromSpec(FileSetSpec.of(directory) .prefixed("content/") .including(List.of("**/*.txt")) .excluding(List.of("**/ignored.txt")) @@ -83,7 +95,7 @@ void configuresArchivedFileSet(@TempDir Path directory) { CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.of(archive) + provider.newArchiver(configurer -> configurer.addArchivedFileSetFromSpec(ArchivedFileSetSpec.of(archive) .prefixed("lib/") .including(List.of("**/*.class")) .excluding(List.of("module-info.class")) @@ -124,7 +136,7 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { configurer.setOverrideGid(1000); configurer.setOverrideGroupName("group"); configurer.setUmask(UnixPermissions.of(PosixFilePermissions.fromString("----w--w-"))); - configurer.configureReproducibleBuild(timestamp); + configurer.configureReproducibleBuild(c -> c.setDefaultLastModifiedTime(timestamp)); }); assertThat(actual).isSameAs(expected); diff --git a/src/test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java similarity index 84% rename from src/test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java rename to src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java index e383f2688..fed965dfb 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java @@ -23,22 +23,27 @@ 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.Archiver; 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.archivers.config.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.CaseSensitivity; +import org.codehaus.plexus.archivers.config.DefaultExcludes; +import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.SymbolicLinkHandling; 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.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; -class PlexusIoResourceCollectionProviderTest { +class PlexusIoResourceCollectionProviderIT { @Test void exposesOnlyConfiguredCreation() { @@ -53,7 +58,12 @@ void exposesOnlyConfiguredCreation() { .doesNotContain("create"); assertThat(Arrays.stream(PlexusIoResourceCollectionConfigurer.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(PlexusIoResourceCollection.class); + assertThat(m.getReturnType()).isEqualTo(PlexusIoResourceCollectionConfigurer.class); + }); } @Test @@ -87,7 +97,7 @@ void configuresFilesystemResourceCollection(@TempDir Path directory) { PlexusIoFileResourceCollection collection = (PlexusIoFileResourceCollection) new PlexusIoFileResourceCollectionProvider().newPlexusIoResourceCollection(configurer -> { configurer.setSource(directory); - configurer.setSymbolicLinkHandling(SymbolicLinkHandling.DO_NOT_FOLLOW); + configurer.setSymbolicLinkHandling(SymbolicLinkHandling.PRESERVE); }); assertThat(collection.getBaseDir()).isEqualTo(directory.toFile()); diff --git a/src/test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java b/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java similarity index 79% rename from src/test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java rename to src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java index 0575e0895..e5f8802fe 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java @@ -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.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; 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 a393601b3..38d8afe78 100755 --- a/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java @@ -395,7 +395,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) { @@ -466,9 +467,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 { @@ -553,8 +555,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(); } } @@ -592,19 +594,19 @@ protected PlexusIoResourceCollection asResourceCollection(final ArchivedFileSet "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); @@ -699,9 +701,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) { @@ -827,8 +830,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); } } @@ -844,8 +847,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/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/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..c02706ba1 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java @@ -21,6 +21,7 @@ import java.io.File; import java.util.Collection; +import java.util.Collections; import java.util.Locale; import java.util.Map; @@ -43,15 +44,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 +69,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 +87,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 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/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/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/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/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/archiver/bzip2/BZip2ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java 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..344f534e9 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java @@ -0,0 +1,39 @@ +/* + * 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.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 { + Archiver create(); + + default Archiver create(Consumer configurer) { + Archiver archiver = create(); + configurer.accept(ArchiverConfigurer.of(archiver)); + return archiver; + } +} diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/package-info.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManagers.java similarity index 54% rename from src/main/java/org/codehaus/plexus/archivers/internal/package-info.java rename to src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManagers.java index 6beca257b..e7f2eaec5 100644 --- a/src/main/java/org/codehaus/plexus/archivers/internal/package-info.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManagers.java @@ -14,8 +14,28 @@ * limitations under the License. * */ +package org.codehaus.plexus.archiver.manager; /** - * Internal implementations. This package must not be exported by the module descriptor. + * Creates a new ArchiverManager + * + * @since 5.0.0 */ -package org.codehaus.plexus.archivers.internal; +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/PlexusIoResourceCollectionFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java new file mode 100644 index 000000000..ca6d11883 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java @@ -0,0 +1,39 @@ +/* + * 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.function.Consumer; + +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +/** + * Creates configured Plexus IO resource collection instances. + * + * @since 5.0.0 + */ +@FunctionalInterface +public interface PlexusIoResourceCollectionFactory { + PlexusIoResourceCollection create(); + + default PlexusIoResourceCollection create(Consumer configurer) { + PlexusIoResourceCollection resourceCollection = create(); + configurer.accept(PlexusIoResourceCollectionConfigurer.of(resourceCollection)); + return resourceCollection; + } +} 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..9b81b9b9c --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -0,0 +1,116 @@ +/* + * 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.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.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; +import org.codehaus.plexus.archivers.spi.ArchiverProvider; +import org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.spi.UnArchiverProvider; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +class ServiceLoaderArchiverManager extends AbstractArchiverManager { + + ServiceLoaderArchiverManager() { + super(archivers(ServiceLoader.load(ArchiverProvider.class)), + unarchivers(ServiceLoader.load(UnArchiverProvider.class)), + plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class))); + } + + ServiceLoaderArchiverManager(ClassLoader classLoader) { + super(archivers(ServiceLoader.load(ArchiverProvider.class, classLoader)), + unarchivers(ServiceLoader.load(UnArchiverProvider.class, classLoader)), + plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class, classLoader))); + } + + ServiceLoaderArchiverManager(ModuleLayer moduleLayer) { + super(archivers(ServiceLoader.load(moduleLayer, ArchiverProvider.class)), + unarchivers(ServiceLoader.load(moduleLayer, UnArchiverProvider.class)), + plexusIoResourceCollections(ServiceLoader.load(moduleLayer, PlexusIoResourceCollectionProvider.class))); + } + + private static Map archivers(ServiceLoader serviceLoader) { + return StreamSupport.stream(serviceLoader.spliterator(), false) + .collect(Collectors.toMap(ArchiverProvider::getName, ServiceLoaderArchiverManager::toArchiverFactory)); + } + + 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, + ServiceLoaderArchiverManager::toPlexusIoResourceCollectionFactory)); + } + + + private static ArchiverFactory toArchiverFactory(ArchiverProvider provider) { + return new ArchiverFactory() { + + @Override + public Archiver create() { + return create(c -> {}); + } + + public Archiver create(Consumer configurer) { + return provider.newArchiver(configurer); + } + }; + } + + private static UnArchiverFactory toUnArchiverFactory(UnArchiverProvider provider) { + return new UnArchiverFactory() { + + @Override + public UnArchiver create() { + return create(c -> {}); + } + + public UnArchiver create(Consumer configurer) { + return provider.newUnArchiver(configurer); + } + }; + } + + private static PlexusIoResourceCollectionFactory toPlexusIoResourceCollectionFactory(PlexusIoResourceCollectionProvider provider) { + return new PlexusIoResourceCollectionFactory() { + + @Override + public PlexusIoResourceCollection create() { + return create(c -> {}); + } + + public PlexusIoResourceCollection create(Consumer configurer) { + return provider.newPlexusIoResourceCollection(configurer); + } + }; + } + +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java new file mode 100644 index 000000000..2dbb662e6 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java @@ -0,0 +1,39 @@ +/* + * 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.function.Consumer; + +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; + +/** + * Creates configured unarchiver instances. + * + * @since 5.0.0 + */ +@FunctionalInterface +public interface UnArchiverFactory { + UnArchiver create(); + + default UnArchiver create(Consumer configurer) { + UnArchiver unArchiver = create(); + 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 100% rename from src/main/java/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/war/WarArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java 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 100% rename from src/main/java/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java 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/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java similarity index 86% rename from src/main/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java index ede58a918..ae41e1f9a 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java @@ -15,12 +15,14 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; import java.nio.file.Path; +import java.util.Collection; import java.util.List; import java.util.Objects; +import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; @@ -34,20 +36,20 @@ public final class ArchivedFileSetSpec { private final Path archive; private String prefix; - private List includes; - private List excludes; + private Collection includes; + private Collection excludes; private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; private DefaultExcludes defaultExcludes = DefaultExcludes.USE; private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; - private List fileSelectors; + private Collection fileSelectors; private InputStreamTransformer streamTransformer; - private List fileMappers; + private Collection fileMappers; private ArchivedFileSetSpec(Path archive) { this.archive = Objects.requireNonNull(archive, "archive"); } - static ArchivedFileSetSpec of(Path archive) { + public static ArchivedFileSetSpec of(Path archive) { return new ArchivedFileSetSpec(archive); } @@ -56,12 +58,12 @@ public ArchivedFileSetSpec prefixed(String prefix) { return this; } - public ArchivedFileSetSpec including(List includes) { + public ArchivedFileSetSpec including(Collection includes) { this.includes = List.copyOf(includes); return this; } - public ArchivedFileSetSpec excluding(List excludes) { + public ArchivedFileSetSpec excluding(Collection excludes) { this.excludes = List.copyOf(excludes); return this; } @@ -81,7 +83,7 @@ public ArchivedFileSetSpec emptyDirectories(EmptyDirectoryHandling emptyDirector return this; } - public ArchivedFileSetSpec selectedBy(List fileSelectors) { + public ArchivedFileSetSpec selectedBy(Collection fileSelectors) { this.fileSelectors = List.copyOf(fileSelectors); return this; } @@ -91,7 +93,7 @@ public ArchivedFileSetSpec transformedBy(InputStreamTransformer streamTransforme return this; } - public ArchivedFileSetSpec mappedBy(List fileMappers) { + public ArchivedFileSetSpec mappedBy(Collection fileMappers) { this.fileMappers = List.copyOf(fileMappers); return this; } 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 75% 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..80c831683 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -15,17 +15,14 @@ * */ -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. @@ -33,13 +30,14 @@ * @since 5.0.0 */ public interface ArchiverConfigurer { - void addFileSet(FileSet fileSet); + + static ArchiverConfigurer of(Archiver archiver) { + return new DefaultArchiverConfigurer(archiver); + } + + void addFileSetFromSpec(FileSetSpec fileSetSpec); - void addFileSet(FileSetSpec fileSetSpec); - - void addArchivedFileSet(ArchivedFileSet fileSet); - - void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec); + void addArchivedFileSetFromSpec(ArchivedFileSetSpec fileSetSpec); void setDestFile(Path destFile); @@ -75,5 +73,5 @@ public interface ArchiverConfigurer { void setUmask(UnixPermissions 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..fcc81bf5a 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 96% 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..954b5a500 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. diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java similarity index 80% rename from src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java index a68f87560..5c352df41 100644 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -15,51 +15,39 @@ * */ -package org.codehaus.plexus.archivers.internal; +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.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 { + +/** + * Applies the configuration to the applied archiver + * + * @since 5.0.0 + */ +final class DefaultArchiverConfigurer implements ArchiverConfigurer { private final Archiver archiver; - public DefaultArchiverConfigurer(Archiver archiver) { + 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")); + public void addFileSetFromSpec(FileSetSpec fileSetSpec) { + archiver.addFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toFileSet()); } @Override - public void addArchivedFileSet(ArchivedFileSet fileSet) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSet, "fileSet")); - } - - @Override - public void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec")); + public void addArchivedFileSetFromSpec(ArchivedFileSetSpec fileSetSpec) { + archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toArchivedFileSet()); } @Override @@ -163,10 +151,12 @@ public void setUmask(UnixPermissions permissions) { archiver.setUmask(toMode(permissions)); } - @Override - public void configureReproducibleBuild(FileTime lastModifiedTime) { - archiver.configureReproducibleBuild(Objects.requireNonNull(lastModifiedTime, "lastModifiedTime")); - } + + @Override + public void configureReproducibleBuild(Consumer spec) { + ReproducibleBuildConfigurer configurer = new DefaultReproducibleBuildConfigurer(archiver); + spec.accept(configurer); + } private static int toMode(UnixPermissions unixPermissions) { int mode = 0; @@ -186,4 +176,5 @@ private static int toMode(UnixPermissions unixPermissions) { } return mode; } + } diff --git a/src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java similarity index 95% rename from src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java index 093c86249..525128cf2 100644 --- a/src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; /** * Controls whether standard version-control and temporary files are excluded. diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java similarity index 89% rename from src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java index e64f96966..b386b7a4b 100644 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java @@ -15,19 +15,13 @@ * */ -package org.codehaus.plexus.archivers.internal; +package org.codehaus.plexus.archivers.config; 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; @@ -38,10 +32,15 @@ import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; -public final class DefaultPlexusIoResourceCollectionConfigurer implements PlexusIoResourceCollectionConfigurer { +/** + * Applies the configuration to the applied resourceCollection + * + * @since 5.0.0 + */ +final class DefaultPlexusIoResourceCollectionConfigurer implements PlexusIoResourceCollectionConfigurer { private final PlexusIoResourceCollection collection; - public DefaultPlexusIoResourceCollectionConfigurer(PlexusIoResourceCollection collection) { + DefaultPlexusIoResourceCollectionConfigurer(PlexusIoResourceCollection collection) { this.collection = Objects.requireNonNull(collection, "collection"); } 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..c7e4f1028 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java @@ -0,0 +1,40 @@ +/* + * 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 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); + } +} 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/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/java/org/codehaus/plexus/archiver/FileSetSpec.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java similarity index 88% rename from src/main/java/org/codehaus/plexus/archiver/FileSetSpec.java rename to src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java index 39f6d931a..94a5c9ca3 100644 --- a/src/main/java/org/codehaus/plexus/archiver/FileSetSpec.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java @@ -15,12 +15,14 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; import java.nio.file.Path; +import java.util.Collection; import java.util.List; import java.util.Objects; +import org.codehaus.plexus.archiver.FileSet; import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; @@ -34,21 +36,21 @@ public final class FileSetSpec { private final Path directory; private String prefix; - private List includes; - private List excludes; + private Collection includes; + private Collection 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 Collection fileSelectors; private InputStreamTransformer streamTransformer; - private List fileMappers; + private Collection fileMappers; private FileSetSpec(Path directory) { this.directory = Objects.requireNonNull(directory, "directory"); } - static FileSetSpec of(Path directory) { + public static FileSetSpec of(Path directory) { return new FileSetSpec(directory); } @@ -57,12 +59,12 @@ public FileSetSpec prefixed(String prefix) { return this; } - public FileSetSpec including(List includes) { + public FileSetSpec including(Collection includes) { this.includes = List.copyOf(includes); return this; } - public FileSetSpec excluding(List excludes) { + public FileSetSpec excluding(Collection excludes) { this.excludes = List.copyOf(excludes); return this; } @@ -87,7 +89,7 @@ public FileSetSpec symbolicLinks(SymbolicLinkHandling symbolicLinkHandling) { return this; } - public FileSetSpec selectedBy(List fileSelectors) { + public FileSetSpec selectedBy(Collection fileSelectors) { this.fileSelectors = List.copyOf(fileSelectors); return this; } @@ -97,7 +99,7 @@ public FileSetSpec transformedBy(InputStreamTransformer streamTransformer) { return this; } - public FileSetSpec mappedBy(List fileMappers) { + public FileSetSpec mappedBy(Collection fileMappers) { this.fileMappers = List.copyOf(fileMappers); return this; } 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/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java similarity index 85% rename from src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java index 233c4557f..4fd31bfe0 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java @@ -15,18 +15,16 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; 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; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** * Configures a Plexus IO resource collection before it is exposed to callers. @@ -34,6 +32,11 @@ * @since 5.0.0 */ public interface PlexusIoResourceCollectionConfigurer { + + static PlexusIoResourceCollectionConfigurer of(PlexusIoResourceCollection resourceCollection) { + return new DefaultPlexusIoResourceCollectionConfigurer(resourceCollection); + + } void setSource(Path source); void setPrefix(String prefix); 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..d5c08eea9 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java @@ -0,0 +1,35 @@ +/* + * 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; + +/** + * 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 { + + void setDefaultLastModifiedTime(FileTime fileTime); + +} 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/UnixPermissions.java b/src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java similarity index 97% rename from src/main/java/org/codehaus/plexus/archivers/spi/UnixPermissions.java rename to src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java index 60eaa1e4f..4ec6bd31b 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/UnixPermissions.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.config; import java.nio.file.attribute.PosixFilePermission; import java.util.Objects; diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java similarity index 91% rename from src/main/java/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java index ee0d7d313..d9aae44fd 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java @@ -21,7 +21,7 @@ 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 +35,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/spi/AbstractPlexusIoResourceCollectionProvider.java similarity index 89% rename from src/main/java/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java index 98cef8df1..3e510f3a3 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java @@ -20,7 +20,7 @@ import java.util.Objects; import java.util.function.Consumer; -import org.codehaus.plexus.archivers.internal.DefaultPlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -38,7 +38,7 @@ public final PlexusIoResourceCollection newPlexusIoResourceCollection( Consumer configurer) { PlexusIoResourceCollection collection = createResourceCollection(); Objects.requireNonNull(configurer, "configurer") - .accept(new DefaultPlexusIoResourceCollectionConfigurer(collection)); + .accept(PlexusIoResourceCollectionConfigurer.of(collection)); return collection; } } diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java similarity index 86% rename from src/main/java/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java index c8fa5dab2..40c03ee73 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java @@ -21,7 +21,7 @@ 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/spi/ArchiverProvider.java similarity index 95% rename from src/main/java/org/codehaus/plexus/archivers/spi/ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/ArchiverProvider.java index 298ebbb4f..2a1c797c6 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/ArchiverProvider.java @@ -20,6 +20,7 @@ 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/spi/PlexusIoResourceCollectionProvider.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java index 12edd011e..52fd9ab9b 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java @@ -19,6 +19,7 @@ import java.util.function.Consumer; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java similarity index 87% rename from src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java index ef2f8bb2c..d53a05a2e 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java @@ -20,6 +20,7 @@ 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/test/java/org/codehaus/plexus/archiver/SymlinkTest.java b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java index 938c9f7ae..f2fa855e0 100644 --- a/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java @@ -140,20 +140,4 @@ void followingSymLinksResolvesLinkedDirectories() throws Exception { assertFalse(Files.isSymbolicLink(linkedFile.toPath())); assertTrue(linkedFile.isFile()); } - - @Test - @DisabledOnOs(OS.WINDOWS) - 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)); - final File archiveFile = new File("target/output/dirarchiver-spec-followed-symlink"); - archiveFile.mkdirs(); - archiver.setDestFile(archiveFile); - - archiver.createArchive(); - - assertTrue(new File(archiveFile, "symDir/targetFile.txt").isFile()); - } } 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);