From e934e1ce99080d96d9f651896973e654dcf11b36 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Tue, 18 Aug 2026 19:12:53 +0200 Subject: [PATCH 01/20] make all managers Java8 compatible --- .../plexus/archiver/AbstractArchiver.java | 41 +++++++------- .../plexus/archiver/ArchiveEntry.java | 8 +-- .../plexus/archiver/CaseSensitivities.java | 4 +- .../archiver/diags/TrackingArchiver.java | 15 +++--- .../archiver/dir/DirectoryArchiver.java | 4 +- .../jar/JarToolModularJarArchiver.java | 53 ++++++++++++++++--- .../plexus/archiver/jar/Manifest.java | 3 +- .../manager/AbstractArchiverManager.java | 7 +-- .../manager/DefaultArchiverManager.java | 8 ++- .../manager/ServiceLoaderArchiverManager.java | 14 ++--- .../plexus/archiver/util/ResourceUtils.java | 8 +-- .../plexus/archiver/util/Streams.java | 4 +- 12 files changed, 108 insertions(+), 61 deletions(-) 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/CaseSensitivities.java b/src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java index 1ef309df2..dd1794b34 100644 --- a/src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java +++ b/src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java @@ -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) { + return ((FixedCaseSensitivity) caseSensitivity).caseSensitive; } String osName = System.getProperty("os.name", "").toLowerCase(Locale.ROOT); 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..f96ec01af 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,9 +44,9 @@ 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 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/ServiceLoaderArchiverManager.java b/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java index 8ded2eda9..cab856e53 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -19,8 +19,8 @@ import java.util.Map; import java.util.ServiceLoader; -import java.util.ServiceLoader.Provider; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import org.codehaus.plexus.archivers.spi.ArchiverProvider; import org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider; @@ -33,20 +33,20 @@ public ServiceLoaderArchiverManager() { } private static Map archivers() { - return ServiceLoader.load(ArchiverProvider.class).stream() - .map(Provider::get) + return StreamSupport.stream(ServiceLoader.load(ArchiverProvider.class).spliterator(), false) .collect(Collectors.toMap(ArchiverProvider::getName, provider -> provider::newArchiver)); } private static Map unarchivers() { - return ServiceLoader.load(UnArchiverProvider.class).stream() - .map(Provider::get) + return StreamSupport.stream(ServiceLoader.load(UnArchiverProvider.class).spliterator(), false) .collect(Collectors.toMap(UnArchiverProvider::getName, provider -> provider::newUnarchiver)); } private static Map plexusIoResourceCollections() { - return ServiceLoader.load(PlexusIoResourceCollectionProvider.class).stream() - .map(Provider::get) + return StreamSupport.stream( + ServiceLoader.load(PlexusIoResourceCollectionProvider.class) + .spliterator(), + false) .collect(Collectors.toMap( PlexusIoResourceCollectionProvider::getName, provider -> provider::newPlexusIoResourceCollection)); 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() { From 25dd429d1c193f64f2cc6779df9f9ed549ef3270 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 22 Aug 2026 13:41:53 +0200 Subject: [PATCH 02/20] Turn library into Multi Release jar, so Java 8 is still supported, while new features will only be available for Java 17 --- .github/workflows/maven.yml | 4 - pom.xml | 106 ++++- .../archiver/manager/CdiFactoryIT.java} | 2 +- .../ServiceLoaderArchiverManagerIT.java} | 2 +- .../archivers/spi/ArchiverProviderIT.java} | 11 +- ...PlexusIoResourceCollectionProviderIT.java} | 6 +- .../archivers/spi/UnArchiverProviderIT.java} | 9 +- .../plexus/archiver/ArchivedFileSet.java | 13 +- .../codehaus/plexus/archiver/Archiver.java | 22 -- .../org/codehaus/plexus/archiver/FileSet.java | 13 +- .../manager/AbstractArchiverManager.java | 6 +- .../archiver/manager/ArchiverFactory.java | 5 +- .../archiver/manager/CdiArchiverFactory.java | 9 +- .../CdiPlexusIoResourceCollectionFactory.java | 10 +- .../manager/CdiUnArchiverFactory.java | 9 +- .../PlexusIoResourceCollectionFactory.java | 5 +- .../archiver/manager/UnArchiverFactory.java | 5 +- .../internal/DefaultArchiverConfigurer.java | 12 +- ...tPlexusIoResourceCollectionConfigurer.java | 4 +- .../internal/DefaultUnArchiverConfigurer.java | 6 +- .../internal/package-info.java | 0 .../spi/AbstractArchiverProvider.java | 1 + ...actPlexusIoResourceCollectionProvider.java | 1 + .../spi/AbstractUnArchiverProvider.java | 3 +- .../spi/ArchiverProvider.java | 1 + .../PlexusIoResourceCollectionProvider.java | 1 + .../spi/UnArchiverProvider.java | 3 +- .../plexus/archiver}/ArchiveCreation.java | 2 +- .../plexus/archiver/ArchivedFileSet.java | 32 ++ .../plexus/archiver/ArchivedFileSetSpec.java | 0 .../codehaus/plexus/archiver/Archiver.java | 371 ++++++++++++++++++ .../plexus/archiver}/ArchiverConfigurer.java | 8 +- .../plexus/archiver/CaseSensitivities.java | 0 .../plexus/archiver/CaseSensitivity.java | 0 .../plexus/archiver/DefaultExcludes.java | 0 .../plexus/archiver}/DuplicateHandling.java | 4 +- .../archiver/EmptyDirectoryHandling.java | 0 .../archiver}/ExistingFileHandling.java | 2 +- .../org/codehaus/plexus/archiver/FileSet.java | 29 ++ .../codehaus/plexus/archiver/FileSetSpec.java | 0 .../plexus/archiver}/PermissionHandling.java | 2 +- .../PlexusIoResourceCollectionConfigurer.java | 5 +- .../archiver}/SymbolicLinkHandling.java | 2 +- .../archiver}/UnArchiverConfigurer.java | 2 +- .../plexus/archiver}/UnixPermissions.java | 2 +- .../archiver/bzip2/BZip2ArchiverProvider.java | 0 .../bzip2/BZip2UnArchiverProvider.java | 0 ...PlexusIoBz2ResourceCollectionProvider.java | 0 ...exusIoBzip2ResourceCollectionProvider.java | 0 .../archiver/car/CarUnArchiverProvider.java | 0 ...usIoCarFileResourceCollectionProvider.java | 0 .../dir/DirectoryArchiverProvider.java | 0 .../archiver/ear/EarArchiverProvider.java | 0 .../archiver/ear/EarUnArchiverProvider.java | 0 ...usIoEarFileResourceCollectionProvider.java | 0 .../archiver/esb/EsbUnArchiverProvider.java | 0 ...usIoEsbFileResourceCollectionProvider.java | 0 .../archiver/gzip/GZipArchiverProvider.java | 0 .../archiver/gzip/GZipUnArchiverProvider.java | 0 .../PlexusIoGzResourceCollectionProvider.java | 0 ...lexusIoGzipResourceCollectionProvider.java | 0 .../archiver/jar/JarArchiverProvider.java | 0 .../JarToolModularJarArchiverProvider.java | 0 .../archiver/jar/JarUnArchiverProvider.java | 0 ...usIoJarFileResourceCollectionProvider.java | 0 .../archiver/manager/ArchiverFactory.java | 40 ++ .../archiver/manager/ArchiverManager.java | 104 +++++ .../PlexusIoResourceCollectionFactory.java | 40 ++ .../manager/ServiceLoaderArchiverManager.java | 57 ++- .../archiver/manager/UnArchiverFactory.java | 40 ++ .../archiver/nar/NarUnArchiverProvider.java | 0 ...usIoNarFileResourceCollectionProvider.java | 0 .../archiver/par/ParUnArchiverProvider.java | 0 ...usIoParFileResourceCollectionProvider.java | 0 ...usIoRarFileResourceCollectionProvider.java | 0 .../archiver/rar/RarArchiverProvider.java | 0 .../archiver/rar/RarUnArchiverProvider.java | 0 ...lexusIoFileResourceCollectionProvider.java | 0 ...lexusIoFileResourceCollectionProvider.java | 0 ...usIoSarFileResourceCollectionProvider.java | 0 .../archiver/sar/SarUnArchiverProvider.java | 0 ...xusIoSnappyResourceCollectionProvider.java | 0 .../snappy/SnappyArchiverProvider.java | 0 .../snappy/SnappyUnArchiverProvider.java | 0 ...usIoSwcFileResourceCollectionProvider.java | 0 .../archiver/swc/SwcUnArchiverProvider.java | 0 ...sIoTBZ2FileResourceCollectionProvider.java | 0 ...usIoTGZFileResourceCollectionProvider.java | 0 ...usIoTXZFileResourceCollectionProvider.java | 0 ...IoTZstdFileResourceCollectionProvider.java | 0 ...arBZip2FileResourceCollectionProvider.java | 0 ...usIoTarFileResourceCollectionProvider.java | 0 ...TarGZipFileResourceCollectionProvider.java | 0 ...rSnappyFileResourceCollectionProvider.java | 0 ...IoTarXZFileResourceCollectionProvider.java | 0 ...TarZstdFileResourceCollectionProvider.java | 0 .../archiver/tar/TBZ2ArchiverProvider.java | 0 .../archiver/tar/TBZ2UnArchiverProvider.java | 0 .../archiver/tar/TGZArchiverProvider.java | 0 .../archiver/tar/TGZUnArchiverProvider.java | 0 .../archiver/tar/TXZArchiverProvider.java | 0 .../archiver/tar/TXZUnArchiverProvider.java | 0 .../archiver/tar/TZstdArchiverProvider.java | 0 .../archiver/tar/TZstdUnArchiverProvider.java | 0 .../archiver/tar/TarArchiverProvider.java | 0 .../tar/TarBZip2ArchiverProvider.java | 0 .../tar/TarBZip2UnArchiverProvider.java | 0 .../archiver/tar/TarGZipArchiverProvider.java | 0 .../tar/TarGZipUnArchiverProvider.java | 0 .../tar/TarSnappyArchiverProvider.java | 0 .../tar/TarSnappyUnArchiverProvider.java | 0 .../archiver/tar/TarUnArchiverProvider.java | 0 .../archiver/tar/TarXZArchiverProvider.java | 0 .../archiver/tar/TarXZUnArchiverProvider.java | 0 .../archiver/tar/TarZstdArchiverProvider.java | 0 .../tar/TarZstdUnArchiverProvider.java | 0 ...usIoWarFileResourceCollectionProvider.java | 0 .../archiver/war/WarArchiverProvider.java | 0 .../archiver/war/WarUnArchiverProvider.java | 0 .../PlexusIoXZResourceCollectionProvider.java | 0 .../archiver/xz/XZArchiverProvider.java | 0 .../archiver/xz/XZUnArchiverProvider.java | 0 ...iverZipFileResourceCollectionProvider.java | 0 .../archiver/zip/ZipArchiverProvider.java | 0 .../archiver/zip/ZipUnArchiverProvider.java | 0 ...lexusIoZstdResourceCollectionProvider.java | 0 .../archiver/zstd/ZstdArchiverProvider.java | 0 .../archiver/zstd/ZstdUnArchiverProvider.java | 0 .../codehaus/plexus/archiver/TestSupport.java | 3 +- .../archiver/jar/BaseJarArchiverTest.java | 4 +- .../jar/JarToolModularJarArchiverTest.java | 96 ++++- .../archiver/manager/ArchiverManagerTest.java | 33 +- 132 files changed, 972 insertions(+), 175 deletions(-) rename src/{test/java/org/codehaus/plexus/archiver/manager/CdiFactoryTest.java => it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java} (99%) rename src/{test/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerTest.java => it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java} (99%) rename src/{test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java => it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java} (96%) rename src/{test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java => it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java} (96%) rename src/{test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java => it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java} (91%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/internal/DefaultArchiverConfigurer.java (95%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/internal/DefaultPlexusIoResourceCollectionConfigurer.java (97%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/internal/DefaultUnArchiverConfigurer.java (93%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/internal/package-info.java (100%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/spi/AbstractArchiverProvider.java (96%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/spi/AbstractPlexusIoResourceCollectionProvider.java (95%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/spi/AbstractUnArchiverProvider.java (91%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/spi/ArchiverProvider.java (95%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/spi/PlexusIoResourceCollectionProvider.java (93%) rename src/main/{java/org/codehaus/plexus/archivers => java17/org.codehaus.plexus.archivers}/spi/UnArchiverProvider.java (88%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/ArchiveCreation.java (96%) create mode 100644 src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java rename src/main/{java => java17}/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java (100%) create mode 100644 src/main/java17/org/codehaus/plexus/archiver/Archiver.java rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/ArchiverConfigurer.java (87%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/CaseSensitivities.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/CaseSensitivity.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/DefaultExcludes.java (100%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/DuplicateHandling.java (93%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java (100%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/ExistingFileHandling.java (96%) create mode 100644 src/main/java17/org/codehaus/plexus/archiver/FileSet.java rename src/main/{java => java17}/org/codehaus/plexus/archiver/FileSetSpec.java (100%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/PermissionHandling.java (96%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/PlexusIoResourceCollectionConfigurer.java (89%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/SymbolicLinkHandling.java (96%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/UnArchiverConfigurer.java (96%) rename src/main/{java/org/codehaus/plexus/archivers/spi => java17/org/codehaus/plexus/archiver}/UnixPermissions.java (97%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java (100%) create mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java create mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java create mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java rename src/main/{java => java17}/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java (53%) create mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java rename src/main/{java => java17}/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/war/WarArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java (100%) rename src/main/{java => java17}/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java (100%) 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 96% 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..5e61fca00 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/ArchiverProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java @@ -25,20 +25,25 @@ import java.util.Comparator; import java.util.List; +import org.codehaus.plexus.archiver.ArchiveCreation; import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.ArchiverConfigurer; +import org.codehaus.plexus.archiver.DuplicateHandling; +import org.codehaus.plexus.archiver.FileSet; +import org.codehaus.plexus.archiver.PermissionHandling; +import org.codehaus.plexus.archiver.UnixPermissions; +import org.codehaus.plexus.archiver.diags.NoOpArchiver; 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.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() { 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 96% 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..ea16b7508 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java @@ -23,10 +23,12 @@ import java.util.Arrays; import java.util.List; +import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archiver.SymbolicLinkHandling; +import org.codehaus.plexus.archiver.gzip.PlexusIoGzipResourceCollectionProvider; import org.codehaus.plexus.archiver.CaseSensitivity; import org.codehaus.plexus.archiver.DefaultExcludes; import org.codehaus.plexus.archiver.EmptyDirectoryHandling; -import org.codehaus.plexus.archiver.gzip.PlexusIoGzipResourceCollectionProvider; import org.codehaus.plexus.archiver.resources.PlexusIoFileResourceCollectionProvider; import org.codehaus.plexus.archiver.zip.PlexusArchiverZipFileResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; @@ -38,7 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat; -class PlexusIoResourceCollectionProviderTest { +class PlexusIoResourceCollectionProviderIT { @Test void exposesOnlyConfiguredCreation() { 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 91% 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..ffa4801a1 100644 --- a/src/test/java/org/codehaus/plexus/archivers/spi/UnArchiverProviderTest.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java @@ -22,20 +22,23 @@ import java.util.Arrays; import java.util.List; +import org.codehaus.plexus.archiver.ExistingFileHandling; +import org.codehaus.plexus.archiver.PermissionHandling; import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archiver.UnArchiverConfigurer; import org.codehaus.plexus.archiver.zip.ZipUnArchiverProvider; 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())) @@ -50,7 +53,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/ArchivedFileSet.java b/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java index da677bf93..7102bb10c 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -5,6 +5,8 @@ import java.io.File; import java.nio.file.Path; +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; + /** * A file set, which consists of the files and directories in * an archive. @@ -13,15 +15,8 @@ */ 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); + public static ArchivedFileSet of(Path path) { + return new DefaultArchivedFileSet(path.toFile()); } /** 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..2ac158e70 100644 --- a/src/main/java/org/codehaus/plexus/archiver/FileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/FileSet.java @@ -3,6 +3,8 @@ import java.io.File; import java.nio.file.Path; +import org.codehaus.plexus.archiver.util.DefaultFileSet; + /** * A file set, which consists of the files and directories in * a common base directory. @@ -11,15 +13,8 @@ */ 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); + static FileSet of(Path path) { + return new DefaultFileSet(path.toFile()); } /** 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 f96ec01af..c02706ba1 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java @@ -52,7 +52,7 @@ protected AbstractArchiverManager( @Override @Nonnull public final Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException { - return getArchiverFactory(archiverName).create(configurer -> {}); + return getArchiverFactory(archiverName).create(); } @Override @@ -69,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 @@ -87,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/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/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/archivers/internal/DefaultArchiverConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultArchiverConfigurer.java similarity index 95% rename from src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/internal/DefaultArchiverConfigurer.java index a68f87560..401bde9b6 100644 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultArchiverConfigurer.java +++ b/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultArchiverConfigurer.java @@ -26,14 +26,14 @@ 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; +import org.codehaus.plexus.archiver.ArchiverConfigurer; +import org.codehaus.plexus.archiver.ArchiveCreation; +import org.codehaus.plexus.archiver.DuplicateHandling; +import org.codehaus.plexus.archiver.EmptyDirectoryHandling; +import org.codehaus.plexus.archiver.PermissionHandling; +import org.codehaus.plexus.archiver.UnixPermissions; public final class DefaultArchiverConfigurer implements ArchiverConfigurer { private final Archiver archiver; diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java similarity index 97% rename from src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java index e64f96966..edfe4676e 100644 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java @@ -26,8 +26,8 @@ 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.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archiver.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; diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultUnArchiverConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultUnArchiverConfigurer.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archivers/internal/DefaultUnArchiverConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/internal/DefaultUnArchiverConfigurer.java index 4c4ea593a..1caf053b3 100644 --- a/src/main/java/org/codehaus/plexus/archivers/internal/DefaultUnArchiverConfigurer.java +++ b/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultUnArchiverConfigurer.java @@ -22,9 +22,9 @@ 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.archiver.ExistingFileHandling; +import org.codehaus.plexus.archiver.PermissionHandling; +import org.codehaus.plexus.archiver.UnArchiverConfigurer; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; diff --git a/src/main/java/org/codehaus/plexus/archivers/internal/package-info.java b/src/main/java17/org.codehaus.plexus.archivers/internal/package-info.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archivers/internal/package-info.java rename to src/main/java17/org.codehaus.plexus.archivers/internal/package-info.java 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 96% 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..743e90280 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java +++ b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractArchiverProvider.java @@ -21,6 +21,7 @@ import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.ArchiverConfigurer; import org.codehaus.plexus.archivers.internal.DefaultArchiverConfigurer; /** 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 95% 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..bc2aea42c 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractPlexusIoResourceCollectionProvider.java @@ -20,6 +20,7 @@ import java.util.Objects; import java.util.function.Consumer; +import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.archivers.internal.DefaultPlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; 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 91% 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..73d4532e6 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java +++ b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractUnArchiverProvider.java @@ -21,6 +21,7 @@ import java.util.function.Consumer; import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archiver.UnArchiverConfigurer; import org.codehaus.plexus.archivers.internal.DefaultUnArchiverConfigurer; /** @@ -33,7 +34,7 @@ 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)); 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..0389523a1 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.archiver.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..d45517c41 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.archiver.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 88% 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..ec8812348 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.archiver.UnArchiverConfigurer; /** * Service provider for a named archive extraction format. @@ -30,5 +31,5 @@ public sealed interface UnArchiverProvider permits AbstractUnArchiverProvider { String getName(); - UnArchiver newUnarchiver(Consumer configurer); + UnArchiver newUnArchiver(Consumer configurer); } diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiveCreation.java b/src/main/java17/org/codehaus/plexus/archiver/ArchiveCreation.java similarity index 96% rename from src/main/java/org/codehaus/plexus/archivers/spi/ArchiveCreation.java rename to src/main/java17/org/codehaus/plexus/archiver/ArchiveCreation.java index 4af7dda53..0e291686b 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiveCreation.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchiveCreation.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; /** * Controls whether an archive is always recreated or only when out of date. diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java new file mode 100644 index 000000000..da677bf93 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -0,0 +1,32 @@ +package org.codehaus.plexus.archiver; + +import javax.annotation.CheckForNull; + +import java.io.File; +import java.nio.file.Path; + +/** + * A file set, which consists of the files and directories in + * an archive. + * + * @since 1.0-alpha-9 + */ +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. + */ + @CheckForNull + File getArchive(); +} diff --git a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java rename to src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/Archiver.java b/src/main/java17/org/codehaus/plexus/archiver/Archiver.java new file mode 100644 index 000000000..32424882d --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/Archiver.java @@ -0,0 +1,371 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.codehaus.plexus.archiver; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.attribute.FileTime; +import java.util.Comparator; +import java.util.HashSet; +import java.util.Set; + +import org.codehaus.plexus.components.io.resources.PlexusIoResource; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +public interface Archiver { + + /** + * Default value for the dirmode attribute. + */ + int DEFAULT_DIR_MODE = UnixStat.DIR_FLAG | UnixStat.DEFAULT_DIR_PERM; + + /** + * Default value for the filemode attribute. + */ + int DEFAULT_FILE_MODE = UnixStat.FILE_FLAG | UnixStat.DEFAULT_FILE_PERM; + + /** + * Default value for the symlinkmode attribute. + */ + int DEFAULT_SYMLILNK_MODE = UnixStat.LINK_FLAG | UnixStat.DEFAULT_LINK_PERM; + + String DUPLICATES_ADD = "add"; + + String DUPLICATES_PRESERVE = "preserve"; + + String DUPLICATES_SKIP = "skip"; + + String DUPLICATES_FAIL = "fail"; + + Set DUPLICATES_VALID_BEHAVIORS = new HashSet() { + + private static final long serialVersionUID = 1L; + + { + add(DUPLICATES_ADD); + add(DUPLICATES_PRESERVE); + add(DUPLICATES_SKIP); + add(DUPLICATES_FAIL); + } + }; + + void createArchive() throws ArchiverException, IOException; + + /** + * Adds the given file set to the archive. + * + * @throws ArchiverException if adding the file set failed. + * @since 1.0-alpha-9 + */ + 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; + + void addFile(@Nonnull File inputFile, @Nonnull String destFileName) throws ArchiverException; + + void addFile(@Nonnull File inputFile, @Nonnull String destFileName, int permissions) throws ArchiverException; + + 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. + * + * @param charset the encoding to use for filename encoding (e.g. for zip files) + * + * Stream transformers are supported on this method + * + * @since 1.0-alpha-9 + */ + void addArchivedFileSet(ArchivedFileSet fileSet, Charset charset) throws ArchiverException; + + /** + * Adds the given resource collection to the archive. + * + * Stream transformers are *not* supported on this method + * + * @since 1.0-alpha-10 + */ + void addResource(PlexusIoResource resource, String destFileName, int permissions) throws ArchiverException; + + /** + * Adds the given resource collection to the archive. + * + * Stream transformers are supported on this method + * + * @since 1.0-alpha-10 + */ + void addResources(PlexusIoResourceCollection resources) throws ArchiverException; + + File getDestFile(); + + void setDestFile(File destFile); + + void setFileMode(int mode); + + int getFileMode(); + + int getOverrideFileMode(); + + void setDefaultFileMode(int mode); + + int getDefaultFileMode(); + + /** + * This is the forced mode that should be used regardless if set, otherwise falls back to default. + * + * @param mode + */ + void setDirectoryMode(int mode); + + /** + * Gets the forced mode for directories, falling back to default if none is forced. + * + * @return + */ + int getDirectoryMode(); + + int getOverrideDirectoryMode(); + + /** + * This is the "default" value we should use if no other value is specified + * + * @param mode + */ + void setDefaultDirectoryMode(int mode); + + int getDefaultDirectoryMode(); + + boolean getIncludeEmptyDirs(); + + void setIncludeEmptyDirs(boolean includeEmptyDirs); + + void setDotFileDirectory(File dotFileDirectory); + + /** + * Returns an iterator over instances of {@link ArchiveEntry}, which have previously been added by calls to + * {@link #addResources(PlexusIoResourceCollection)}, {@link #addResource(PlexusIoResource, String, int)}, + * {@link #addFileSet(FileSet)}, etc. + * + * @since 1.0-alpha-10 + */ + @Nonnull + ResourceIterator getResources() throws ArchiverException; + + /** + *

+ * Returns, whether recreating the archive is forced (default). Setting this option to false means, that the + * archiver should compare the timestamps of included files with the timestamp of the target archive and rebuild the + * archive only, if the latter timestamp precedes the former timestamps. Checking for timestamps will typically + * offer a performance gain (in particular, if the following steps in a build can be suppressed, if an archive isn't + * recreated) on the cost that you get inaccurate results from time to time. In particular, removal of source files + * won't be detected. + *

+ *

+ * An archiver doesn't necessarily support checks for uptodate. If so, setting this option to true will simply be + * ignored. The method {@link #isSupportingForced()} may be called to check whether an archiver does support + * uptodate checks. + *

+ * + * @return true if the target archive should always be created; false otherwise + * + * @see #setForced(boolean) + * @see #isSupportingForced() + */ + boolean isForced(); + + /** + *

+ * Sets, whether recreating the archive is forced (default). Setting this option to false means, that the archiver + * should compare the timestamps of included files with the timestamp of the target archive and rebuild the archive + * only, if the latter timestamp precedes the former timestamps. Checking for timestamps will typically offer a + * performance gain (in particular, if the following steps in a build can be suppressed, if an archive isn't + * recreated) on the cost that you get inaccurate results from time to time. In particular, removal of source files + * won't be detected. + *

+ *

+ * An archiver doesn't necessarily support checks for uptodate. If so, setting this option to true will simply be + * ignored. The method {@link #isSupportingForced()} may be called to check whether an archiver does support + * uptodate checks. + *

+ * + * @param forced + * true, if the target archive should always be created; false otherwise + * + * @see #isForced() + * @see #isSupportingForced() + */ + void setForced(boolean forced); + + /** + * Returns, whether the archive supports uptodate checks. If so, you may set {@link #setForced(boolean)} to true. + * + * @return true, if the archiver does support uptodate checks, false otherwise + * + * @see #setForced(boolean) + * @see #isForced() + */ + boolean isSupportingForced(); + + /** + * Returns the behavior of this archiver when duplicate files are detected. + */ + String getDuplicateBehavior(); + + /** + * Set the behavior of this archiver when duplicate files are detected. One of:
+ *
    + *
  • add - Add the duplicates to the archive as duplicate entries
  • + *
  • skip/preserve - Leave the first entry encountered in the archive, skip the new one
  • + *
  • fail - throw an {@link ArchiverException}
  • + *
+ *
+ * See {@link Archiver#DUPLICATES_ADD}, {@link Archiver#DUPLICATES_SKIP}, {@link Archiver#DUPLICATES_PRESERVE}, + * {@link Archiver#DUPLICATES_FAIL}. + */ + void setDuplicateBehavior(String duplicate); + + /** + * @since 1.1 + */ + boolean isIgnorePermissions(); + + /** + * @since 1.1 + */ + void setIgnorePermissions(final boolean ignorePermissions); + + /** + * Sets the last modification time of the entries (if non null). + * + * @param lastModifiedTime to set in the archive entries + * + * @see #getLastModifiedTime() + * @since 4.3.0 + */ + void setLastModifiedTime(final FileTime lastModifiedTime); + + /** + * Returns the last modification time of the archiver. + * + * @return The last modification time of the archiver, null if not specified + * + * @see #setLastModifiedTime(FileTime) + * @since 4.3.0 + */ + FileTime getLastModifiedTime(); + + /** + * Set filename comparator, used to sort file entries when scanning directories since File.list() does not + * guarantee any order. + * + * @since 4.2.0 + */ + void setFilenameComparator(Comparator filenameComparator); + + /** + * @since 4.2.0 + */ + void setOverrideUid(int uid); + + /** + * @since 4.2.0 + */ + void setOverrideUserName(String userName); + + /** + * @since 4.2.0 + */ + int getOverrideUid(); + + /** + * @since 4.2.0 + */ + String getOverrideUserName(); + + /** + * @since 4.2.0 + */ + void setOverrideGid(int gid); + + /** + * @since 4.2.0 + */ + void setOverrideGroupName(String groupName); + + /** + * @since 4.2.0 + */ + int getOverrideGid(); + + /** + * @since 4.2.0 + */ + String getOverrideGroupName(); + + /** + * @since 4.7.0 + */ + void setUmask(int umask); + + /** + * @since 4.7.0 + */ + int getUmask(); + + /** + * Configure the archiver to create archives in a reproducible way (see + * Reproducible Builds). + *

This will configure: + *

    + *
  • reproducible archive entries order,
  • + *
  • defined entries timestamp
  • + *
+ * + * @param lastModifiedTime The last modification time of the entries + * + * @see Reproducible Builds + * @since 4.3.0 + */ + void configureReproducibleBuild(FileTime lastModifiedTime); +} diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java similarity index 87% rename from src/main/java/org/codehaus/plexus/archivers/spi/ArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java index 0b82cc92a..342623730 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java @@ -15,18 +15,12 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; import java.nio.file.Path; import java.nio.file.attribute.FileTime; import java.util.Comparator; -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; - /** * Configures content on an archiver without exposing its file set implementations. * diff --git a/src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java b/src/main/java17/org/codehaus/plexus/archiver/CaseSensitivities.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archiver/CaseSensitivities.java rename to src/main/java17/org/codehaus/plexus/archiver/CaseSensitivities.java diff --git a/src/main/java/org/codehaus/plexus/archiver/CaseSensitivity.java b/src/main/java17/org/codehaus/plexus/archiver/CaseSensitivity.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archiver/CaseSensitivity.java rename to src/main/java17/org/codehaus/plexus/archiver/CaseSensitivity.java diff --git a/src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java b/src/main/java17/org/codehaus/plexus/archiver/DefaultExcludes.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archiver/DefaultExcludes.java rename to src/main/java17/org/codehaus/plexus/archiver/DefaultExcludes.java diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/DuplicateHandling.java b/src/main/java17/org/codehaus/plexus/archiver/DuplicateHandling.java similarity index 93% rename from src/main/java/org/codehaus/plexus/archivers/spi/DuplicateHandling.java rename to src/main/java17/org/codehaus/plexus/archiver/DuplicateHandling.java index 244ef9360..98ce25a82 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/DuplicateHandling.java +++ b/src/main/java17/org/codehaus/plexus/archiver/DuplicateHandling.java @@ -15,9 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; - -import org.codehaus.plexus.archiver.Archiver; +package org.codehaus.plexus.archiver; /** * Controls how duplicate archive entries are handled. diff --git a/src/main/java/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java b/src/main/java17/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java rename to src/main/java17/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/ExistingFileHandling.java b/src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java similarity index 96% rename from src/main/java/org/codehaus/plexus/archivers/spi/ExistingFileHandling.java rename to src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java index eb1d1ee1f..367b900c3 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/ExistingFileHandling.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; /** * Controls how extraction handles existing destination files. diff --git a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java new file mode 100644 index 000000000..c08a5f159 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java @@ -0,0 +1,29 @@ +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 + * a common base directory. + * + * @since 1.0-alpha-9 + */ +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. + */ + File getDirectory(); +} diff --git a/src/main/java/org/codehaus/plexus/archiver/FileSetSpec.java b/src/main/java17/org/codehaus/plexus/archiver/FileSetSpec.java similarity index 100% rename from src/main/java/org/codehaus/plexus/archiver/FileSetSpec.java rename to src/main/java17/org/codehaus/plexus/archiver/FileSetSpec.java diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/PermissionHandling.java b/src/main/java17/org/codehaus/plexus/archiver/PermissionHandling.java similarity index 96% rename from src/main/java/org/codehaus/plexus/archivers/spi/PermissionHandling.java rename to src/main/java17/org/codehaus/plexus/archiver/PermissionHandling.java index cac175871..35f45b855 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/PermissionHandling.java +++ b/src/main/java17/org/codehaus/plexus/archiver/PermissionHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; /** * 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/archiver/PlexusIoResourceCollectionConfigurer.java similarity index 89% rename from src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java index 233c4557f..1324303be 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java @@ -15,15 +15,12 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; 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; diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/SymbolicLinkHandling.java b/src/main/java17/org/codehaus/plexus/archiver/SymbolicLinkHandling.java similarity index 96% rename from src/main/java/org/codehaus/plexus/archivers/spi/SymbolicLinkHandling.java rename to src/main/java17/org/codehaus/plexus/archiver/SymbolicLinkHandling.java index 6843d14ab..c82561012 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/SymbolicLinkHandling.java +++ b/src/main/java17/org/codehaus/plexus/archiver/SymbolicLinkHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; /** * Controls whether a filesystem resource collection follows symbolic links. diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java similarity index 96% rename from src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java index 92fcbf217..a84931ff0 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/UnArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; import java.nio.file.Path; import java.util.List; diff --git a/src/main/java/org/codehaus/plexus/archivers/spi/UnixPermissions.java b/src/main/java17/org/codehaus/plexus/archiver/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/archiver/UnixPermissions.java index 60eaa1e4f..d629df7f4 100644 --- a/src/main/java/org/codehaus/plexus/archivers/spi/UnixPermissions.java +++ b/src/main/java17/org/codehaus/plexus/archiver/UnixPermissions.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archiver; import java.nio.file.attribute.PosixFilePermission; import java.util.Objects; 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..2f552b87a --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.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.archiver.manager; + +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.ArchiverConfigurer; +import org.codehaus.plexus.archivers.internal.DefaultArchiverConfigurer; + +/** + * Creates configured archiver instances. + * + * @since 5.0.0 + */ +@FunctionalInterface +public interface ArchiverFactory { + Archiver create(); + + default Archiver create(Consumer configurer) { + Archiver archiver = create(); + configurer.accept(new DefaultArchiverConfigurer(archiver)); + return archiver; + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java new file mode 100644 index 000000000..5f29d7eac --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java @@ -0,0 +1,104 @@ +/* + * Copyright 2001,2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.codehaus.plexus.archiver.manager; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.util.Collection; + +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +public interface ArchiverManager { + @Nonnull + Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException; + + /** + * Returns a factory for the named archive format. + * + * @since 5.0.0 + */ + @Nonnull + ArchiverFactory getArchiverFactory(@Nonnull String archiverName) throws NoSuchArchiverException; + + @Nonnull + Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException; + + /** + * Returns an archiver factory selected from the file extension. + * + * @since 5.0.0 + */ + @Nonnull + ArchiverFactory getArchiverFactory(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableArchivers(); + + @Nonnull + UnArchiver getUnArchiver(@Nonnull String unArchiverName) throws NoSuchArchiverException; + + /** + * Returns a factory for the named archive extraction format. + * + * @since 5.0.0 + */ + @Nonnull + UnArchiverFactory getUnArchiverFactory(@Nonnull String unArchiverName) throws NoSuchArchiverException; + + @Nonnull + UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException; + + /** + * Returns an unarchiver factory selected from the file extension. + * + * @since 5.0.0 + */ + @Nonnull + UnArchiverFactory getUnArchiverFactory(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableUnArchivers(); + + @Nonnull + PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException; + + /** + * Returns a resource collection factory selected from the file extension. + * + * @since 5.0.0 + */ + @Nonnull + PlexusIoResourceCollectionFactory getResourceCollectionFactory(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + PlexusIoResourceCollection getResourceCollection(String unArchiverName) throws NoSuchArchiverException; + + /** + * Returns a resource collection factory for the named format. + * + * @since 5.0.0 + */ + @Nonnull + PlexusIoResourceCollectionFactory getResourceCollectionFactory(String resourceCollectionName) + throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableResourceCollections(); +} 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..f95568e2a --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.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.archiver.manager; + +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; +import org.codehaus.plexus.archivers.internal.DefaultPlexusIoResourceCollectionConfigurer; + +/** + * 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(new DefaultPlexusIoResourceCollectionConfigurer(resourceCollection)); + return resourceCollection; + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java similarity index 53% rename from src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java rename to src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java index cab856e53..4e9c1ec10 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -19,12 +19,19 @@ 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.archiver.ArchiverConfigurer; +import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archiver.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; public class ServiceLoaderArchiverManager extends AbstractArchiverManager { @@ -34,12 +41,12 @@ public ServiceLoaderArchiverManager() { private static Map archivers() { return StreamSupport.stream(ServiceLoader.load(ArchiverProvider.class).spliterator(), false) - .collect(Collectors.toMap(ArchiverProvider::getName, provider -> provider::newArchiver)); + .collect(Collectors.toMap(ArchiverProvider::getName, ServiceLoaderArchiverManager::toArchiverFactory)); } private static Map unarchivers() { return StreamSupport.stream(ServiceLoader.load(UnArchiverProvider.class).spliterator(), false) - .collect(Collectors.toMap(UnArchiverProvider::getName, provider -> provider::newUnarchiver)); + .collect(Collectors.toMap(UnArchiverProvider::getName, ServiceLoaderArchiverManager::toUnArchiverFactory)); } private static Map plexusIoResourceCollections() { @@ -49,6 +56,50 @@ private static Map plexusIoResourceCo false) .collect(Collectors.toMap( PlexusIoResourceCollectionProvider::getName, - provider -> provider::newPlexusIoResourceCollection)); + 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..365f9629b --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.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.archiver.manager; + +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archiver.UnArchiverConfigurer; +import org.codehaus.plexus.archivers.internal.DefaultUnArchiverConfigurer; + +/** + * Creates configured unarchiver instances. + * + * @since 5.0.0 + */ +@FunctionalInterface +public interface UnArchiverFactory { + UnArchiver create(); + + default UnArchiver create(Consumer configurer) { + UnArchiver unArchiver = create(); + configurer.accept(new DefaultUnArchiverConfigurer(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/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..b40a4ba5c 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,8 @@ import java.io.File; import java.io.InputStream; -import java.lang.module.ModuleDescriptor; +import java.lang.reflect.Method; +import java.nio.file.Paths; import java.nio.file.attribute.FileTime; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -29,11 +30,14 @@ import java.util.zip.ZipFile; import org.codehaus.plexus.archiver.ArchiverException; -import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.archiver.FileSet; 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 { @@ -50,15 +54,16 @@ void setup() throws Exception { archiver = getJarArchiver(); archiver.setDestFile(jarFile); - archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-classes"))); + archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-classes"))); } /* * 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.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); archiver.setModuleVersion("1.0.0"); archiver.setModuleMainClass("com.example.app.Main"); @@ -75,8 +80,9 @@ 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"))); + archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); Manifest manifest = new Manifest(); manifest.addConfiguredAttribute(new Manifest.Attribute("Main-Class", "com.example.app.Main2")); archiver.addConfiguredManifest(manifest); @@ -96,8 +102,9 @@ 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"))); + archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); Manifest manifest = new Manifest(); manifest.addConfiguredAttribute(new Manifest.Attribute("Main-Class", "com.example.app.Main2")); archiver.addConfiguredManifest(manifest); @@ -114,8 +121,9 @@ 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.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); archiver.createArchive(); // verify that the proper version and main class are set @@ -126,20 +134,41 @@ 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"))); + archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); // Not a valid version archiver.setModuleVersion("notAValidVersion"); 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(FileSet.of(Paths.get("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.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); archiver.setCompress(false); archiver.createArchive(); @@ -161,8 +190,9 @@ 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.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); archiver.addFile(new File("src/test/jars/test.jar"), "META-INF/lib/test.jar"); archiver.setRecompressAddedZips(false); @@ -186,6 +216,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 +302,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 +350,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..96fd84858 100644 --- a/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java @@ -24,14 +24,14 @@ package org.codehaus.plexus.archiver.manager; import java.io.File; +import java.nio.file.Paths; import java.util.stream.Collectors; import java.util.stream.Stream; import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.FileSet; 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; @@ -107,7 +107,7 @@ void reuseArchiver() throws Exception { Archiver archiver = manager.getArchiver("jar"); assertNotNull(archiver); - archiver.addFileSet(DefaultFileSet.fileSet(new File(getBasedir()))); + archiver.addFileSet(FileSet.of(Paths.get(getBasedir()))); Archiver newArchiver = manager.getArchiver("jar"); assertNotNull(newArchiver); @@ -168,33 +168,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); From e1177f6f7c8c29c1f824816b64a149ad2749e481 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sun, 23 Aug 2026 21:03:32 +0200 Subject: [PATCH 03/20] rearrange classes --- .../archivers/spi/ArchiverProviderIT.java | 7 ++++++- .../PlexusIoResourceCollectionProviderIT.java | 10 ++++++++- .../archivers/spi/UnArchiverProviderIT.java | 9 +++++++- .../internal/package-info.java | 21 ------------------- .../spi/AbstractArchiverProvider.java | 3 +-- ...actPlexusIoResourceCollectionProvider.java | 3 +-- .../spi/AbstractUnArchiverProvider.java | 3 +-- .../plexus/archiver/ArchiverConfigurer.java | 9 ++++---- .../archiver}/DefaultArchiverConfigurer.java | 16 +++----------- ...tPlexusIoResourceCollectionConfigurer.java | 6 +++--- .../DefaultUnArchiverConfigurer.java | 6 +++--- .../plexus/archiver/ExistingFileHandling.java | 4 ++-- .../PlexusIoResourceCollectionConfigurer.java | 6 ++++++ .../plexus/archiver/UnArchiverConfigurer.java | 5 +++++ .../archiver/manager/ArchiverFactory.java | 3 +-- .../PlexusIoResourceCollectionFactory.java | 3 +-- .../archiver/manager/UnArchiverFactory.java | 3 +-- 17 files changed, 56 insertions(+), 61 deletions(-) delete mode 100644 src/main/java17/org.codehaus.plexus.archivers/internal/package-info.java rename src/main/java17/{org.codehaus.plexus.archivers/internal => org/codehaus/plexus/archiver}/DefaultArchiverConfigurer.java (92%) rename src/main/java17/{org.codehaus.plexus.archivers/internal => org/codehaus/plexus/archiver}/DefaultPlexusIoResourceCollectionConfigurer.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers/internal => org/codehaus/plexus/archiver}/DefaultUnArchiverConfigurer.java (93%) diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java index 5e61fca00..df9fa37c8 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java @@ -56,7 +56,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 diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java index ea16b7508..d374889a3 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java @@ -26,6 +26,8 @@ import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.archiver.SymbolicLinkHandling; import org.codehaus.plexus.archiver.gzip.PlexusIoGzipResourceCollectionProvider; +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.ArchiverConfigurer; import org.codehaus.plexus.archiver.CaseSensitivity; import org.codehaus.plexus.archiver.DefaultExcludes; import org.codehaus.plexus.archiver.EmptyDirectoryHandling; @@ -35,6 +37,7 @@ 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; @@ -55,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 diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java index ffa4801a1..6902690ee 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java @@ -24,9 +24,11 @@ import org.codehaus.plexus.archiver.ExistingFileHandling; import org.codehaus.plexus.archiver.PermissionHandling; +import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.UnArchiverConfigurer; import org.codehaus.plexus.archiver.zip.ZipUnArchiverProvider; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -45,7 +47,12 @@ void exposesOnlyConfiguredCreation() { .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 diff --git a/src/main/java17/org.codehaus.plexus.archivers/internal/package-info.java b/src/main/java17/org.codehaus.plexus.archivers/internal/package-info.java deleted file mode 100644 index 6beca257b..000000000 --- a/src/main/java17/org.codehaus.plexus.archivers/internal/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -/** - * Internal implementations. This package must not be exported by the module descriptor. - */ -package org.codehaus.plexus.archivers.internal; diff --git a/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractArchiverProvider.java b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractArchiverProvider.java index 743e90280..b860e21ea 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractArchiverProvider.java +++ b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractArchiverProvider.java @@ -22,7 +22,6 @@ import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverConfigurer; -import org.codehaus.plexus.archivers.internal.DefaultArchiverConfigurer; /** * Base implementation that keeps unconfigured archiver creation internal to service providers. @@ -36,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/java17/org.codehaus.plexus.archivers/spi/AbstractPlexusIoResourceCollectionProvider.java b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractPlexusIoResourceCollectionProvider.java index bc2aea42c..e812594a5 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractPlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractPlexusIoResourceCollectionProvider.java @@ -21,7 +21,6 @@ import java.util.function.Consumer; import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; -import org.codehaus.plexus.archivers.internal.DefaultPlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -39,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/java17/org.codehaus.plexus.archivers/spi/AbstractUnArchiverProvider.java b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractUnArchiverProvider.java index 73d4532e6..935af0932 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractUnArchiverProvider.java +++ b/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractUnArchiverProvider.java @@ -22,7 +22,6 @@ import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.UnArchiverConfigurer; -import org.codehaus.plexus.archivers.internal.DefaultUnArchiverConfigurer; /** * Base implementation that keeps unconfigured unarchiver creation internal to service providers. @@ -36,7 +35,7 @@ public abstract non-sealed class AbstractUnArchiverProvider implements UnArchive @Override 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/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java index 342623730..0fd20c64e 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java @@ -27,12 +27,13 @@ * @since 5.0.0 */ public interface ArchiverConfigurer { - void addFileSet(FileSet fileSet); - + + static ArchiverConfigurer of(Archiver archiver) { + return new DefaultArchiverConfigurer(archiver); + } + void addFileSet(FileSetSpec fileSetSpec); - void addArchivedFileSet(ArchivedFileSet fileSet); - void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec); void setDestFile(Path destFile); diff --git a/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java similarity index 92% rename from src/main/java17/org.codehaus.plexus.archivers/internal/DefaultArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java index 401bde9b6..f36dfb151 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.internal; +package org.codehaus.plexus.archiver; import java.nio.file.Path; import java.nio.file.attribute.FileTime; @@ -35,28 +35,18 @@ import org.codehaus.plexus.archiver.PermissionHandling; import org.codehaus.plexus.archiver.UnixPermissions; -public final class DefaultArchiverConfigurer implements ArchiverConfigurer { +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")); } - @Override - public void addArchivedFileSet(ArchivedFileSet fileSet) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSet, "fileSet")); - } - @Override public void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec) { archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec")); diff --git a/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/DefaultPlexusIoResourceCollectionConfigurer.java similarity index 95% rename from src/main/java17/org.codehaus.plexus.archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org/codehaus/plexus/archiver/DefaultPlexusIoResourceCollectionConfigurer.java index edfe4676e..d97998334 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultPlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/DefaultPlexusIoResourceCollectionConfigurer.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.internal; +package org.codehaus.plexus.archiver; import java.nio.charset.Charset; import java.nio.file.Path; @@ -38,10 +38,10 @@ import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; -public final class DefaultPlexusIoResourceCollectionConfigurer implements PlexusIoResourceCollectionConfigurer { +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/internal/DefaultUnArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/DefaultUnArchiverConfigurer.java similarity index 93% rename from src/main/java17/org.codehaus.plexus.archivers/internal/DefaultUnArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archiver/DefaultUnArchiverConfigurer.java index 1caf053b3..513b24095 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/internal/DefaultUnArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/DefaultUnArchiverConfigurer.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.internal; +package org.codehaus.plexus.archiver; import java.nio.file.Path; import java.util.List; @@ -28,10 +28,10 @@ import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; -public final class DefaultUnArchiverConfigurer implements UnArchiverConfigurer { +final class DefaultUnArchiverConfigurer implements UnArchiverConfigurer { private final UnArchiver unarchiver; - public DefaultUnArchiverConfigurer(UnArchiver unarchiver) { + DefaultUnArchiverConfigurer(UnArchiver unarchiver) { this.unarchiver = Objects.requireNonNull(unarchiver, "unarchiver"); } diff --git a/src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java b/src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java index 367b900c3..d7fed61b8 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java @@ -23,8 +23,8 @@ * @since 5.0.0 */ public sealed interface ExistingFileHandling permits FixedExistingFileHandling { - ExistingFileHandling OVERWRITE = new FixedExistingFileHandling(true); - ExistingFileHandling KEEP_NEWER = new FixedExistingFileHandling(false); + public static final ExistingFileHandling OVERWRITE = new FixedExistingFileHandling(true); + public static final ExistingFileHandling KEEP_NEWER = new FixedExistingFileHandling(false); } final class FixedExistingFileHandling implements ExistingFileHandling { diff --git a/src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java index 1324303be..0b550e22a 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java @@ -24,6 +24,7 @@ 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. @@ -31,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/archiver/UnArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java index a84931ff0..5baed5d99 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java @@ -29,6 +29,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/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java index 2f552b87a..f8429d5a0 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java @@ -21,7 +21,6 @@ import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverConfigurer; -import org.codehaus.plexus.archivers.internal.DefaultArchiverConfigurer; /** * Creates configured archiver instances. @@ -34,7 +33,7 @@ public interface ArchiverFactory { default Archiver create(Consumer configurer) { Archiver archiver = create(); - configurer.accept(new DefaultArchiverConfigurer(archiver)); + configurer.accept(ArchiverConfigurer.of(archiver)); return archiver; } } diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java index f95568e2a..35cf57770 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java @@ -21,7 +21,6 @@ import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; -import org.codehaus.plexus.archivers.internal.DefaultPlexusIoResourceCollectionConfigurer; /** * Creates configured Plexus IO resource collection instances. @@ -34,7 +33,7 @@ public interface PlexusIoResourceCollectionFactory { default PlexusIoResourceCollection create(Consumer configurer) { PlexusIoResourceCollection resourceCollection = create(); - configurer.accept(new DefaultPlexusIoResourceCollectionConfigurer(resourceCollection)); + configurer.accept(PlexusIoResourceCollectionConfigurer.of(resourceCollection)); return resourceCollection; } } diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java index 365f9629b..3a8261fcb 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java @@ -21,7 +21,6 @@ import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archiver.UnArchiverConfigurer; -import org.codehaus.plexus.archivers.internal.DefaultUnArchiverConfigurer; /** * Creates configured unarchiver instances. @@ -34,7 +33,7 @@ public interface UnArchiverFactory { default UnArchiver create(Consumer configurer) { UnArchiver unArchiver = create(); - configurer.accept(new DefaultUnArchiverConfigurer(unArchiver)); + configurer.accept(UnArchiverConfigurer.of(unArchiver)); return unArchiver; } } From 4cf8abe891aba1ee0c81bf19ad84f13137cf055c Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Mon, 24 Aug 2026 10:22:27 +0200 Subject: [PATCH 04/20] use mains Archiver --- .../codehaus/plexus/archiver/Archiver.java | 371 ------------------ .../archiver/DefaultArchiverConfigurer.java | 4 +- 2 files changed, 2 insertions(+), 373 deletions(-) delete mode 100644 src/main/java17/org/codehaus/plexus/archiver/Archiver.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/Archiver.java b/src/main/java17/org/codehaus/plexus/archiver/Archiver.java deleted file mode 100644 index 32424882d..000000000 --- a/src/main/java17/org/codehaus/plexus/archiver/Archiver.java +++ /dev/null @@ -1,371 +0,0 @@ -/** - * - * Copyright 2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.codehaus.plexus.archiver; - -import javax.annotation.Nonnull; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.file.attribute.FileTime; -import java.util.Comparator; -import java.util.HashSet; -import java.util.Set; - -import org.codehaus.plexus.components.io.resources.PlexusIoResource; -import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; - -public interface Archiver { - - /** - * Default value for the dirmode attribute. - */ - int DEFAULT_DIR_MODE = UnixStat.DIR_FLAG | UnixStat.DEFAULT_DIR_PERM; - - /** - * Default value for the filemode attribute. - */ - int DEFAULT_FILE_MODE = UnixStat.FILE_FLAG | UnixStat.DEFAULT_FILE_PERM; - - /** - * Default value for the symlinkmode attribute. - */ - int DEFAULT_SYMLILNK_MODE = UnixStat.LINK_FLAG | UnixStat.DEFAULT_LINK_PERM; - - String DUPLICATES_ADD = "add"; - - String DUPLICATES_PRESERVE = "preserve"; - - String DUPLICATES_SKIP = "skip"; - - String DUPLICATES_FAIL = "fail"; - - Set DUPLICATES_VALID_BEHAVIORS = new HashSet() { - - private static final long serialVersionUID = 1L; - - { - add(DUPLICATES_ADD); - add(DUPLICATES_PRESERVE); - add(DUPLICATES_SKIP); - add(DUPLICATES_FAIL); - } - }; - - void createArchive() throws ArchiverException, IOException; - - /** - * Adds the given file set to the archive. - * - * @throws ArchiverException if adding the file set failed. - * @since 1.0-alpha-9 - */ - 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; - - void addFile(@Nonnull File inputFile, @Nonnull String destFileName) throws ArchiverException; - - void addFile(@Nonnull File inputFile, @Nonnull String destFileName, int permissions) throws ArchiverException; - - 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. - * - * @param charset the encoding to use for filename encoding (e.g. for zip files) - * - * Stream transformers are supported on this method - * - * @since 1.0-alpha-9 - */ - void addArchivedFileSet(ArchivedFileSet fileSet, Charset charset) throws ArchiverException; - - /** - * Adds the given resource collection to the archive. - * - * Stream transformers are *not* supported on this method - * - * @since 1.0-alpha-10 - */ - void addResource(PlexusIoResource resource, String destFileName, int permissions) throws ArchiverException; - - /** - * Adds the given resource collection to the archive. - * - * Stream transformers are supported on this method - * - * @since 1.0-alpha-10 - */ - void addResources(PlexusIoResourceCollection resources) throws ArchiverException; - - File getDestFile(); - - void setDestFile(File destFile); - - void setFileMode(int mode); - - int getFileMode(); - - int getOverrideFileMode(); - - void setDefaultFileMode(int mode); - - int getDefaultFileMode(); - - /** - * This is the forced mode that should be used regardless if set, otherwise falls back to default. - * - * @param mode - */ - void setDirectoryMode(int mode); - - /** - * Gets the forced mode for directories, falling back to default if none is forced. - * - * @return - */ - int getDirectoryMode(); - - int getOverrideDirectoryMode(); - - /** - * This is the "default" value we should use if no other value is specified - * - * @param mode - */ - void setDefaultDirectoryMode(int mode); - - int getDefaultDirectoryMode(); - - boolean getIncludeEmptyDirs(); - - void setIncludeEmptyDirs(boolean includeEmptyDirs); - - void setDotFileDirectory(File dotFileDirectory); - - /** - * Returns an iterator over instances of {@link ArchiveEntry}, which have previously been added by calls to - * {@link #addResources(PlexusIoResourceCollection)}, {@link #addResource(PlexusIoResource, String, int)}, - * {@link #addFileSet(FileSet)}, etc. - * - * @since 1.0-alpha-10 - */ - @Nonnull - ResourceIterator getResources() throws ArchiverException; - - /** - *

- * Returns, whether recreating the archive is forced (default). Setting this option to false means, that the - * archiver should compare the timestamps of included files with the timestamp of the target archive and rebuild the - * archive only, if the latter timestamp precedes the former timestamps. Checking for timestamps will typically - * offer a performance gain (in particular, if the following steps in a build can be suppressed, if an archive isn't - * recreated) on the cost that you get inaccurate results from time to time. In particular, removal of source files - * won't be detected. - *

- *

- * An archiver doesn't necessarily support checks for uptodate. If so, setting this option to true will simply be - * ignored. The method {@link #isSupportingForced()} may be called to check whether an archiver does support - * uptodate checks. - *

- * - * @return true if the target archive should always be created; false otherwise - * - * @see #setForced(boolean) - * @see #isSupportingForced() - */ - boolean isForced(); - - /** - *

- * Sets, whether recreating the archive is forced (default). Setting this option to false means, that the archiver - * should compare the timestamps of included files with the timestamp of the target archive and rebuild the archive - * only, if the latter timestamp precedes the former timestamps. Checking for timestamps will typically offer a - * performance gain (in particular, if the following steps in a build can be suppressed, if an archive isn't - * recreated) on the cost that you get inaccurate results from time to time. In particular, removal of source files - * won't be detected. - *

- *

- * An archiver doesn't necessarily support checks for uptodate. If so, setting this option to true will simply be - * ignored. The method {@link #isSupportingForced()} may be called to check whether an archiver does support - * uptodate checks. - *

- * - * @param forced - * true, if the target archive should always be created; false otherwise - * - * @see #isForced() - * @see #isSupportingForced() - */ - void setForced(boolean forced); - - /** - * Returns, whether the archive supports uptodate checks. If so, you may set {@link #setForced(boolean)} to true. - * - * @return true, if the archiver does support uptodate checks, false otherwise - * - * @see #setForced(boolean) - * @see #isForced() - */ - boolean isSupportingForced(); - - /** - * Returns the behavior of this archiver when duplicate files are detected. - */ - String getDuplicateBehavior(); - - /** - * Set the behavior of this archiver when duplicate files are detected. One of:
- *
    - *
  • add - Add the duplicates to the archive as duplicate entries
  • - *
  • skip/preserve - Leave the first entry encountered in the archive, skip the new one
  • - *
  • fail - throw an {@link ArchiverException}
  • - *
- *
- * See {@link Archiver#DUPLICATES_ADD}, {@link Archiver#DUPLICATES_SKIP}, {@link Archiver#DUPLICATES_PRESERVE}, - * {@link Archiver#DUPLICATES_FAIL}. - */ - void setDuplicateBehavior(String duplicate); - - /** - * @since 1.1 - */ - boolean isIgnorePermissions(); - - /** - * @since 1.1 - */ - void setIgnorePermissions(final boolean ignorePermissions); - - /** - * Sets the last modification time of the entries (if non null). - * - * @param lastModifiedTime to set in the archive entries - * - * @see #getLastModifiedTime() - * @since 4.3.0 - */ - void setLastModifiedTime(final FileTime lastModifiedTime); - - /** - * Returns the last modification time of the archiver. - * - * @return The last modification time of the archiver, null if not specified - * - * @see #setLastModifiedTime(FileTime) - * @since 4.3.0 - */ - FileTime getLastModifiedTime(); - - /** - * Set filename comparator, used to sort file entries when scanning directories since File.list() does not - * guarantee any order. - * - * @since 4.2.0 - */ - void setFilenameComparator(Comparator filenameComparator); - - /** - * @since 4.2.0 - */ - void setOverrideUid(int uid); - - /** - * @since 4.2.0 - */ - void setOverrideUserName(String userName); - - /** - * @since 4.2.0 - */ - int getOverrideUid(); - - /** - * @since 4.2.0 - */ - String getOverrideUserName(); - - /** - * @since 4.2.0 - */ - void setOverrideGid(int gid); - - /** - * @since 4.2.0 - */ - void setOverrideGroupName(String groupName); - - /** - * @since 4.2.0 - */ - int getOverrideGid(); - - /** - * @since 4.2.0 - */ - String getOverrideGroupName(); - - /** - * @since 4.7.0 - */ - void setUmask(int umask); - - /** - * @since 4.7.0 - */ - int getUmask(); - - /** - * Configure the archiver to create archives in a reproducible way (see - * Reproducible Builds). - *

This will configure: - *

    - *
  • reproducible archive entries order,
  • - *
  • defined entries timestamp
  • - *
- * - * @param lastModifiedTime The last modification time of the entries - * - * @see Reproducible Builds - * @since 4.3.0 - */ - void configureReproducibleBuild(FileTime lastModifiedTime); -} diff --git a/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java index f36dfb151..111a853ab 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java @@ -44,12 +44,12 @@ final class DefaultArchiverConfigurer implements ArchiverConfigurer { @Override public void addFileSet(FileSetSpec fileSetSpec) { - archiver.addFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec")); + archiver.addFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toFileSet()); } @Override public void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec")); + archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toArchivedFileSet()); } @Override From 3c5d2c4bc81921b376830b253356d62673e5ffc4 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Mon, 24 Aug 2026 15:13:29 +0200 Subject: [PATCH 05/20] move configurers tand related classes to dedicated package --- .../archivers/spi/ArchiverProviderIT.java | 8 ++-- .../plexus/archiver/ArchivedFileSet.java | 7 ---- .../org/codehaus/plexus/archiver/FileSet.java | 5 --- .../config}/ArchiveCreation.java | 0 .../config}/ArchivedFileSetSpec.java | 19 +++++----- .../config}/ArchiverConfigurer.java | 7 ++-- .../config}/CaseSensitivities.java | 0 .../config}/CaseSensitivity.java | 0 .../config}/DefaultArchiverConfigurer.java | 21 +++++++--- .../config}/DefaultExcludes.java | 0 ...tPlexusIoResourceCollectionConfigurer.java | 5 +++ .../DefaultReproducibleBuildConfigurer.java | 38 +++++++++++++++++++ .../config}/DefaultUnArchiverConfigurer.java | 5 +++ .../config}/DuplicateHandling.java | 0 .../config}/EmptyDirectoryHandling.java | 0 .../config}/ExistingFileHandling.java | 0 .../config}/FileSetSpec.java | 19 +++++----- .../config}/PermissionHandling.java | 0 .../PlexusIoResourceCollectionConfigurer.java | 0 .../config/ReproducibleBuildConfigurer.java | 35 +++++++++++++++++ .../config}/SymbolicLinkHandling.java | 0 .../config}/UnArchiverConfigurer.java | 0 .../config}/UnixPermissions.java | 0 .../plexus/archiver/ArchivedFileSet.java | 32 ---------------- .../org/codehaus/plexus/archiver/FileSet.java | 29 -------------- .../jar/JarToolModularJarArchiverTest.java | 21 +++++----- .../archiver/manager/ArchiverManagerTest.java | 5 +-- 27 files changed, 139 insertions(+), 117 deletions(-) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/ArchiveCreation.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/ArchivedFileSetSpec.java (88%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/ArchiverConfigurer.java (88%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/CaseSensitivities.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/CaseSensitivity.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/DefaultArchiverConfigurer.java (92%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/DefaultExcludes.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/DefaultPlexusIoResourceCollectionConfigurer.java (98%) create mode 100644 src/main/java17/org.codehaus.plexus.archivers/config/DefaultReproducibleBuildConfigurer.java rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/DefaultUnArchiverConfigurer.java (97%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/DuplicateHandling.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/EmptyDirectoryHandling.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/ExistingFileHandling.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/FileSetSpec.java (89%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/PermissionHandling.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/PlexusIoResourceCollectionConfigurer.java (100%) create mode 100644 src/main/java17/org.codehaus.plexus.archivers/config/ReproducibleBuildConfigurer.java rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/SymbolicLinkHandling.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/UnArchiverConfigurer.java (100%) rename src/main/java17/{org/codehaus/plexus/archiver => org.codehaus.plexus.archivers/config}/UnixPermissions.java (100%) delete mode 100644 src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java delete mode 100644 src/main/java17/org/codehaus/plexus/archiver/FileSet.java diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java index df9fa37c8..17186f39b 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java @@ -27,10 +27,12 @@ import org.codehaus.plexus.archiver.ArchiveCreation; import org.codehaus.plexus.archiver.ArchivedFileSet; +import org.codehaus.plexus.archiver.ArchivedFileSetSpec; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverConfigurer; import org.codehaus.plexus.archiver.DuplicateHandling; import org.codehaus.plexus.archiver.FileSet; +import org.codehaus.plexus.archiver.FileSetSpec; import org.codehaus.plexus.archiver.PermissionHandling; import org.codehaus.plexus.archiver.UnixPermissions; import org.codehaus.plexus.archiver.diags.NoOpArchiver; @@ -69,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")) @@ -93,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")) @@ -134,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/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java index 7102bb10c..8f2101f6e 100644 --- a/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -3,9 +3,6 @@ import javax.annotation.CheckForNull; import java.io.File; -import java.nio.file.Path; - -import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; /** * A file set, which consists of the files and directories in @@ -15,10 +12,6 @@ */ public interface ArchivedFileSet extends BaseFileSet { - public static ArchivedFileSet of(Path path) { - return new DefaultArchivedFileSet(path.toFile()); - } - /** * Returns the archive file. */ diff --git a/src/main/java/org/codehaus/plexus/archiver/FileSet.java b/src/main/java/org/codehaus/plexus/archiver/FileSet.java index 2ac158e70..869c259e8 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; import org.codehaus.plexus.archiver.util.DefaultFileSet; @@ -13,10 +12,6 @@ */ public interface FileSet extends BaseFileSet { - static FileSet of(Path path) { - return new DefaultFileSet(path.toFile()); - } - /** * Returns the file sets base directory. */ diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchiveCreation.java b/src/main/java17/org.codehaus.plexus.archivers/config/ArchiveCreation.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/ArchiveCreation.java rename to src/main/java17/org.codehaus.plexus.archivers/config/ArchiveCreation.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java b/src/main/java17/org.codehaus.plexus.archivers/config/ArchivedFileSetSpec.java similarity index 88% rename from src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java rename to src/main/java17/org.codehaus.plexus.archivers/config/ArchivedFileSetSpec.java index ede58a918..cdbf29122 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSetSpec.java +++ b/src/main/java17/org.codehaus.plexus.archivers/config/ArchivedFileSetSpec.java @@ -18,6 +18,7 @@ package org.codehaus.plexus.archiver; import java.nio.file.Path; +import java.util.Collection; import java.util.List; import java.util.Objects; @@ -34,20 +35,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 +57,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 +82,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 +92,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/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/config/ArchiverConfigurer.java similarity index 88% rename from src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/config/ArchiverConfigurer.java index 0fd20c64e..df1262bbb 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ArchiverConfigurer.java +++ b/src/main/java17/org.codehaus.plexus.archivers/config/ArchiverConfigurer.java @@ -20,6 +20,7 @@ import java.nio.file.Path; import java.nio.file.attribute.FileTime; import java.util.Comparator; +import java.util.function.Consumer; /** * Configures content on an archiver without exposing its file set implementations. @@ -32,9 +33,9 @@ static ArchiverConfigurer of(Archiver archiver) { return new DefaultArchiverConfigurer(archiver); } - void addFileSet(FileSetSpec fileSetSpec); + void addFileSetFromSpec(FileSetSpec fileSetSpec); - void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec); + void addArchivedFileSetFromSpec(ArchivedFileSetSpec fileSetSpec); void setDestFile(Path destFile); @@ -70,5 +71,5 @@ static ArchiverConfigurer of(Archiver archiver) { void setUmask(UnixPermissions permissions); - void configureReproducibleBuild(FileTime lastModifiedTime); + void configureReproducibleBuild(Consumer reproducibleBuildSpec); } diff --git a/src/main/java17/org/codehaus/plexus/archiver/CaseSensitivities.java b/src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivities.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/CaseSensitivities.java rename to src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivities.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/CaseSensitivity.java b/src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivity.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/CaseSensitivity.java rename to src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivity.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultArchiverConfigurer.java similarity index 92% rename from src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/config/DefaultArchiverConfigurer.java index 111a853ab..b4aef3f4c 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/DefaultArchiverConfigurer.java +++ b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultArchiverConfigurer.java @@ -22,6 +22,7 @@ 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; @@ -35,6 +36,11 @@ import org.codehaus.plexus.archiver.PermissionHandling; import org.codehaus.plexus.archiver.UnixPermissions; +/** + * Applies the configuration to the applied archiver + * + * @since 5.0.0 + */ final class DefaultArchiverConfigurer implements ArchiverConfigurer { private final Archiver archiver; @@ -43,12 +49,12 @@ final class DefaultArchiverConfigurer implements ArchiverConfigurer { } @Override - public void addFileSet(FileSetSpec fileSetSpec) { + public void addFileSetFromSpec(FileSetSpec fileSetSpec) { archiver.addFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toFileSet()); } @Override - public void addArchivedFileSet(ArchivedFileSetSpec fileSetSpec) { + public void addArchivedFileSetFromSpec(ArchivedFileSetSpec fileSetSpec) { archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toArchivedFileSet()); } @@ -153,10 +159,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; @@ -176,4 +184,5 @@ private static int toMode(UnixPermissions unixPermissions) { } return mode; } + } diff --git a/src/main/java17/org/codehaus/plexus/archiver/DefaultExcludes.java b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultExcludes.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/DefaultExcludes.java rename to src/main/java17/org.codehaus.plexus.archivers/config/DefaultExcludes.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java similarity index 98% rename from src/main/java17/org/codehaus/plexus/archiver/DefaultPlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java index d97998334..351d7b473 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/DefaultPlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java @@ -38,6 +38,11 @@ import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; +/** + * Applies the configuration to the applied resourceCollection + * + * @since 5.0.0 + */ final class DefaultPlexusIoResourceCollectionConfigurer implements PlexusIoResourceCollectionConfigurer { private final PlexusIoResourceCollection 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..b157ac906 --- /dev/null +++ b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultReproducibleBuildConfigurer.java @@ -0,0 +1,38 @@ +/* + * Copyright MojoHaus and Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.codehaus.plexus.archiver; + +import java.nio.file.attribute.FileTime; + +/** + * 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/java17/org/codehaus/plexus/archiver/DefaultUnArchiverConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultUnArchiverConfigurer.java similarity index 97% rename from src/main/java17/org/codehaus/plexus/archiver/DefaultUnArchiverConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/config/DefaultUnArchiverConfigurer.java index 513b24095..e1e5df806 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/DefaultUnArchiverConfigurer.java +++ b/src/main/java17/org.codehaus.plexus.archivers/config/DefaultUnArchiverConfigurer.java @@ -28,6 +28,11 @@ import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; +/** + * Applies the configuration to the applied unarchiver + * + * @Since 5.0.0 + */ final class DefaultUnArchiverConfigurer implements UnArchiverConfigurer { private final UnArchiver unarchiver; diff --git a/src/main/java17/org/codehaus/plexus/archiver/DuplicateHandling.java b/src/main/java17/org.codehaus.plexus.archivers/config/DuplicateHandling.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/DuplicateHandling.java rename to src/main/java17/org.codehaus.plexus.archivers/config/DuplicateHandling.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java b/src/main/java17/org.codehaus.plexus.archivers/config/EmptyDirectoryHandling.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/EmptyDirectoryHandling.java rename to src/main/java17/org.codehaus.plexus.archivers/config/EmptyDirectoryHandling.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java b/src/main/java17/org.codehaus.plexus.archivers/config/ExistingFileHandling.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/ExistingFileHandling.java rename to src/main/java17/org.codehaus.plexus.archivers/config/ExistingFileHandling.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/FileSetSpec.java b/src/main/java17/org.codehaus.plexus.archivers/config/FileSetSpec.java similarity index 89% rename from src/main/java17/org/codehaus/plexus/archiver/FileSetSpec.java rename to src/main/java17/org.codehaus.plexus.archivers/config/FileSetSpec.java index 39f6d931a..047f7de9a 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/FileSetSpec.java +++ b/src/main/java17/org.codehaus.plexus.archivers/config/FileSetSpec.java @@ -18,6 +18,7 @@ package org.codehaus.plexus.archiver; import java.nio.file.Path; +import java.util.Collection; import java.util.List; import java.util.Objects; @@ -34,21 +35,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 +58,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 +88,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 +98,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/java17/org/codehaus/plexus/archiver/PermissionHandling.java b/src/main/java17/org.codehaus.plexus.archivers/config/PermissionHandling.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/PermissionHandling.java rename to src/main/java17/org.codehaus.plexus.archivers/config/PermissionHandling.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/config/PlexusIoResourceCollectionConfigurer.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/PlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/config/PlexusIoResourceCollectionConfigurer.java 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..9e761d432 --- /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.archiver; + +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/java17/org/codehaus/plexus/archiver/SymbolicLinkHandling.java b/src/main/java17/org.codehaus.plexus.archivers/config/SymbolicLinkHandling.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/SymbolicLinkHandling.java rename to src/main/java17/org.codehaus.plexus.archivers/config/SymbolicLinkHandling.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java b/src/main/java17/org.codehaus.plexus.archivers/config/UnArchiverConfigurer.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/UnArchiverConfigurer.java rename to src/main/java17/org.codehaus.plexus.archivers/config/UnArchiverConfigurer.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/UnixPermissions.java b/src/main/java17/org.codehaus.plexus.archivers/config/UnixPermissions.java similarity index 100% rename from src/main/java17/org/codehaus/plexus/archiver/UnixPermissions.java rename to src/main/java17/org.codehaus.plexus.archivers/config/UnixPermissions.java diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java deleted file mode 100644 index da677bf93..000000000 --- a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.codehaus.plexus.archiver; - -import javax.annotation.CheckForNull; - -import java.io.File; -import java.nio.file.Path; - -/** - * A file set, which consists of the files and directories in - * an archive. - * - * @since 1.0-alpha-9 - */ -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. - */ - @CheckForNull - File getArchive(); -} diff --git a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java deleted file mode 100644 index c08a5f159..000000000 --- a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java +++ /dev/null @@ -1,29 +0,0 @@ -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 - * a common base directory. - * - * @since 1.0-alpha-9 - */ -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. - */ - File getDirectory(); -} 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 b40a4ba5c..769f86f72 100644 --- a/src/test/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverTest.java @@ -19,7 +19,6 @@ import java.io.File; import java.io.InputStream; import java.lang.reflect.Method; -import java.nio.file.Paths; import java.nio.file.attribute.FileTime; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -30,7 +29,7 @@ import java.util.zip.ZipFile; import org.codehaus.plexus.archiver.ArchiverException; -import org.codehaus.plexus.archiver.FileSet; +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; @@ -54,7 +53,7 @@ void setup() throws Exception { archiver = getJarArchiver(); archiver.setDestFile(jarFile); - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-classes"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-classes"))); } /* @@ -63,7 +62,7 @@ void setup() throws Exception { @Test @EnabledIf("modulesAreSupported") void modularJarWithMainClassAndVersion() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.setModuleVersion("1.0.0"); archiver.setModuleMainClass("com.example.app.Main"); @@ -82,7 +81,7 @@ void modularJarWithMainClassAndVersion() throws Exception { @Test @EnabledIf("modulesAreSupported") void modularJarWithManifestAndModuleMainClass() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); Manifest manifest = new Manifest(); manifest.addConfiguredAttribute(new Manifest.Attribute("Main-Class", "com.example.app.Main2")); archiver.addConfiguredManifest(manifest); @@ -104,7 +103,7 @@ void modularJarWithManifestAndModuleMainClass() throws Exception { @Test @EnabledIf("modulesAreSupported") void modularJarWithManifestMainClassAttribute() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); Manifest manifest = new Manifest(); manifest.addConfiguredAttribute(new Manifest.Attribute("Main-Class", "com.example.app.Main2")); archiver.addConfiguredManifest(manifest); @@ -123,7 +122,7 @@ void modularJarWithManifestMainClassAttribute() throws Exception { @Test @EnabledIf("modulesAreSupported") void modularJar() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.createArchive(); // verify that the proper version and main class are set @@ -136,7 +135,7 @@ void modularJar() throws Exception { @Test @EnabledIf("modulesAreSupported") void invalidModularJar() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); // Not a valid version archiver.setModuleVersion("notAValidVersion"); @@ -150,7 +149,7 @@ void invalidModularJar() throws Exception { @Test @DisabledIf("modulesAreSupported") void modularJarPriorJava9() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.setModuleVersion("1.0.0"); archiver.setModuleMainClass("com.example.app.Main"); @@ -168,7 +167,7 @@ void modularJarPriorJava9() throws Exception { @Test @EnabledIf("modulesAreSupported") void noCompression() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + archiver.addFileSet(DefaultFileSet.fileSet(new File("src/test/resources/java-module-descriptor"))); archiver.setCompress(false); archiver.createArchive(); @@ -192,7 +191,7 @@ void noCompression() throws Exception { @Test @EnabledIf("modulesAreSupported") void compression() throws Exception { - archiver.addFileSet(FileSet.of(Paths.get("src/test/resources/java-module-descriptor"))); + 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"); archiver.setRecompressAddedZips(false); 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 96fd84858..861a9fb7e 100644 --- a/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/manager/ArchiverManagerTest.java @@ -24,14 +24,13 @@ package org.codehaus.plexus.archiver.manager; import java.io.File; -import java.nio.file.Paths; import java.util.stream.Collectors; import java.util.stream.Stream; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.FileSet; 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.PlexusIoResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -107,7 +106,7 @@ void reuseArchiver() throws Exception { Archiver archiver = manager.getArchiver("jar"); assertNotNull(archiver); - archiver.addFileSet(FileSet.of(Paths.get(getBasedir()))); + archiver.addFileSet(DefaultFileSet.fileSet(new File(getBasedir()))); Archiver newArchiver = manager.getArchiver("jar"); assertNotNull(newArchiver); From e384790862ee8cbeb8501360cfd1071b4514370b Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Tue, 25 Aug 2026 10:24:01 +0200 Subject: [PATCH 06/20] fix packages --- .../archivers/spi/ArchiverProviderIT.java | 22 +++++++++---------- .../PlexusIoResourceCollectionProviderIT.java | 14 ++++++------ .../archivers/spi/UnArchiverProviderIT.java | 8 +++---- .../org/codehaus/plexus/archiver/FileSet.java | 2 -- .../archiver/manager/ArchiverFactory.java | 2 +- .../PlexusIoResourceCollectionFactory.java | 2 +- .../manager/ServiceLoaderArchiverManager.java | 6 ++--- .../archiver/manager/UnArchiverFactory.java | 2 +- .../archivers}/config/ArchiveCreation.java | 2 +- .../config/ArchivedFileSetSpec.java | 3 ++- .../archivers}/config/ArchiverConfigurer.java | 4 +++- .../archivers}/config/CaseSensitivities.java | 6 ++--- .../archivers}/config/CaseSensitivity.java | 2 +- .../config/DefaultArchiverConfigurer.java | 10 +-------- .../archivers}/config/DefaultExcludes.java | 2 +- ...tPlexusIoResourceCollectionConfigurer.java | 8 +------ .../DefaultReproducibleBuildConfigurer.java | 4 +++- .../config/DefaultUnArchiverConfigurer.java | 5 +---- .../archivers}/config/DuplicateHandling.java | 4 +++- .../config/EmptyDirectoryHandling.java | 2 +- .../config/ExistingFileHandling.java | 2 +- .../plexus/archivers}/config/FileSetSpec.java | 3 ++- .../archivers}/config/PermissionHandling.java | 2 +- .../PlexusIoResourceCollectionConfigurer.java | 2 +- .../config/ReproducibleBuildConfigurer.java | 2 +- .../config/SymbolicLinkHandling.java | 2 +- .../config/UnArchiverConfigurer.java | 3 ++- .../archivers}/config/UnixPermissions.java | 2 +- .../spi/AbstractArchiverProvider.java | 2 +- ...actPlexusIoResourceCollectionProvider.java | 2 +- .../spi/AbstractUnArchiverProvider.java | 2 +- .../archivers}/spi/ArchiverProvider.java | 2 +- .../PlexusIoResourceCollectionProvider.java | 2 +- .../archivers}/spi/UnArchiverProvider.java | 2 +- 34 files changed, 65 insertions(+), 75 deletions(-) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/ArchiveCreation.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/ArchivedFileSetSpec.java (97%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/ArchiverConfigurer.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/CaseSensitivities.java (86%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/CaseSensitivity.java (96%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/DefaultArchiverConfigurer.java (92%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/DefaultExcludes.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/DefaultPlexusIoResourceCollectionConfigurer.java (93%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/DefaultReproducibleBuildConfigurer.java (92%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/DefaultUnArchiverConfigurer.java (92%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/DuplicateHandling.java (93%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/EmptyDirectoryHandling.java (96%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/ExistingFileHandling.java (96%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/FileSetSpec.java (98%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/PermissionHandling.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/PlexusIoResourceCollectionConfigurer.java (97%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/ReproducibleBuildConfigurer.java (96%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/SymbolicLinkHandling.java (96%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/UnArchiverConfigurer.java (93%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/config/UnixPermissions.java (97%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/spi/AbstractArchiverProvider.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/spi/AbstractPlexusIoResourceCollectionProvider.java (94%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/spi/AbstractUnArchiverProvider.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/spi/ArchiverProvider.java (95%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/spi/PlexusIoResourceCollectionProvider.java (93%) rename src/main/java17/{org.codehaus.plexus.archivers => org/codehaus/plexus/archivers}/spi/UnArchiverProvider.java (93%) diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java index 17186f39b..b448b5472 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java @@ -25,21 +25,21 @@ import java.util.Comparator; import java.util.List; -import org.codehaus.plexus.archiver.ArchiveCreation; import org.codehaus.plexus.archiver.ArchivedFileSet; -import org.codehaus.plexus.archiver.ArchivedFileSetSpec; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.ArchiverConfigurer; -import org.codehaus.plexus.archiver.DuplicateHandling; import org.codehaus.plexus.archiver.FileSet; -import org.codehaus.plexus.archiver.FileSetSpec; -import org.codehaus.plexus.archiver.PermissionHandling; -import org.codehaus.plexus.archiver.UnixPermissions; import org.codehaus.plexus.archiver.diags.NoOpArchiver; -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.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; diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java index d374889a3..5bcff6c91 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java @@ -23,16 +23,16 @@ import java.util.Arrays; import java.util.List; -import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; -import org.codehaus.plexus.archiver.SymbolicLinkHandling; -import org.codehaus.plexus.archiver.gzip.PlexusIoGzipResourceCollectionProvider; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.ArchiverConfigurer; -import org.codehaus.plexus.archiver.CaseSensitivity; -import org.codehaus.plexus.archiver.DefaultExcludes; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; +import org.codehaus.plexus.archiver.gzip.PlexusIoGzipResourceCollectionProvider; import org.codehaus.plexus.archiver.resources.PlexusIoFileResourceCollectionProvider; import org.codehaus.plexus.archiver.zip.PlexusArchiverZipFileResourceCollectionProvider; +import org.codehaus.plexus.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; diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java index 6902690ee..e5f8802fe 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java @@ -22,12 +22,12 @@ import java.util.Arrays; import java.util.List; -import org.codehaus.plexus.archiver.ExistingFileHandling; -import org.codehaus.plexus.archiver.PermissionHandling; -import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archiver.UnArchiverConfigurer; 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; diff --git a/src/main/java/org/codehaus/plexus/archiver/FileSet.java b/src/main/java/org/codehaus/plexus/archiver/FileSet.java index 869c259e8..9f8bf3a32 100644 --- a/src/main/java/org/codehaus/plexus/archiver/FileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/FileSet.java @@ -2,8 +2,6 @@ import java.io.File; -import org.codehaus.plexus.archiver.util.DefaultFileSet; - /** * A file set, which consists of the files and directories in * a common base directory. diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java index f8429d5a0..344f534e9 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; /** * Creates configured archiver instances. diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java index 35cf57770..ca6d11883 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java @@ -19,7 +19,7 @@ import java.util.function.Consumer; -import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java index 4e9c1ec10..39d3135aa 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -24,10 +24,10 @@ import java.util.stream.StreamSupport; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.ArchiverConfigurer; -import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archiver.UnArchiverConfigurer; +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; diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java index 3a8261fcb..2dbb662e6 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archiver.UnArchiverConfigurer; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; /** * Creates configured unarchiver instances. diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/ArchiveCreation.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveCreation.java similarity index 95% rename from src/main/java17/org.codehaus.plexus.archivers/config/ArchiveCreation.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ArchiveCreation.java index 0e291686b..319a764a5 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/ArchiveCreation.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveCreation.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; /** * Controls whether an archive is always recreated or only when out of date. diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/ArchivedFileSetSpec.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java similarity index 97% rename from src/main/java17/org.codehaus.plexus.archivers/config/ArchivedFileSetSpec.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java index cdbf29122..ae41e1f9a 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/ArchivedFileSetSpec.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java @@ -15,13 +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; diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java similarity index 95% rename from src/main/java17/org.codehaus.plexus.archivers/config/ArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index df1262bbb..80c831683 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -15,13 +15,15 @@ * */ -package org.codehaus.plexus.archiver; +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.Archiver; + /** * Configures content on an archiver without exposing its file set implementations. * diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivities.java b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java similarity index 86% rename from src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivities.java rename to src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java index dd1794b34..fcc81bf5a 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/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) { - return ((FixedCaseSensitivity) caseSensitivity).caseSensitive; + if (caseSensitivity instanceof FixedCaseSensitivity cs) { + return cs.caseSensitive; } String osName = System.getProperty("os.name", "").toLowerCase(Locale.ROOT); diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivity.java b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java similarity index 96% rename from src/main/java17/org.codehaus.plexus.archivers/config/CaseSensitivity.java rename to src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java index 62c28688a..954b5a500 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/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/java17/org.codehaus.plexus.archivers/config/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java similarity index 92% rename from src/main/java17/org.codehaus.plexus.archivers/config/DefaultArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java index b4aef3f4c..5c352df41 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; import java.nio.file.Path; import java.nio.file.attribute.FileTime; @@ -25,16 +25,8 @@ 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.FileSet; -import org.codehaus.plexus.archiver.FileSetSpec; -import org.codehaus.plexus.archiver.ArchiverConfigurer; -import org.codehaus.plexus.archiver.ArchiveCreation; -import org.codehaus.plexus.archiver.DuplicateHandling; -import org.codehaus.plexus.archiver.EmptyDirectoryHandling; -import org.codehaus.plexus.archiver.PermissionHandling; -import org.codehaus.plexus.archiver.UnixPermissions; /** * Applies the configuration to the applied archiver diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/DefaultExcludes.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java similarity index 95% rename from src/main/java17/org.codehaus.plexus.archivers/config/DefaultExcludes.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java index 093c86249..525128cf2 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/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/java17/org.codehaus.plexus.archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java similarity index 93% rename from src/main/java17/org.codehaus.plexus.archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java index 351d7b473..b386b7a4b 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java @@ -15,19 +15,13 @@ * */ -package org.codehaus.plexus.archiver; +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.archiver.PlexusIoResourceCollectionConfigurer; -import org.codehaus.plexus.archiver.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; diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/DefaultReproducibleBuildConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java similarity index 92% rename from src/main/java17/org.codehaus.plexus.archivers/config/DefaultReproducibleBuildConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java index b157ac906..c7e4f1028 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/DefaultReproducibleBuildConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java @@ -14,10 +14,12 @@ * limitations under the License. * */ -package org.codehaus.plexus.archiver; +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 * diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/DefaultUnArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultUnArchiverConfigurer.java similarity index 92% rename from src/main/java17/org.codehaus.plexus.archivers/config/DefaultUnArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DefaultUnArchiverConfigurer.java index e1e5df806..a51cfe7a2 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/DefaultUnArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultUnArchiverConfigurer.java @@ -15,16 +15,13 @@ * */ -package org.codehaus.plexus.archiver; +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.archiver.ExistingFileHandling; -import org.codehaus.plexus.archiver.PermissionHandling; -import org.codehaus.plexus.archiver.UnArchiverConfigurer; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/DuplicateHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/DuplicateHandling.java similarity index 93% rename from src/main/java17/org.codehaus.plexus.archivers/config/DuplicateHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/DuplicateHandling.java index 98ce25a82..436152e1e 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/DuplicateHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DuplicateHandling.java @@ -15,7 +15,9 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; + +import org.codehaus.plexus.archiver.Archiver; /** * Controls how duplicate archive entries are handled. diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/EmptyDirectoryHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/EmptyDirectoryHandling.java similarity index 96% rename from src/main/java17/org.codehaus.plexus.archivers/config/EmptyDirectoryHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/EmptyDirectoryHandling.java index 93d6b47b3..9ca987c01 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/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/java17/org.codehaus.plexus.archivers/config/ExistingFileHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/ExistingFileHandling.java similarity index 96% rename from src/main/java17/org.codehaus.plexus.archivers/config/ExistingFileHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ExistingFileHandling.java index d7fed61b8..74754545a 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/ExistingFileHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ExistingFileHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; /** * Controls how extraction handles existing destination files. diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/FileSetSpec.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java similarity index 98% rename from src/main/java17/org.codehaus.plexus.archivers/config/FileSetSpec.java rename to src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java index 047f7de9a..94a5c9ca3 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/FileSetSpec.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java @@ -15,13 +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; diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/PermissionHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/PermissionHandling.java similarity index 95% rename from src/main/java17/org.codehaus.plexus.archivers/config/PermissionHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/PermissionHandling.java index 35f45b855..fa1ca9206 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/PermissionHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PermissionHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; /** * Controls whether source permissions are preserved. diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/PlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java similarity index 97% rename from src/main/java17/org.codehaus.plexus.archivers/config/PlexusIoResourceCollectionConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java index 0b550e22a..4fd31bfe0 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/PlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; import java.nio.charset.Charset; import java.nio.file.Path; diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/ReproducibleBuildConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java similarity index 96% rename from src/main/java17/org.codehaus.plexus.archivers/config/ReproducibleBuildConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java index 9e761d432..d5c08eea9 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/ReproducibleBuildConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; import java.nio.file.attribute.FileTime; diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/SymbolicLinkHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java similarity index 96% rename from src/main/java17/org.codehaus.plexus.archivers/config/SymbolicLinkHandling.java rename to src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java index c82561012..babb40403 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/SymbolicLinkHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; /** * Controls whether a filesystem resource collection follows symbolic links. diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/UnArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/UnArchiverConfigurer.java similarity index 93% rename from src/main/java17/org.codehaus.plexus.archivers/config/UnArchiverConfigurer.java rename to src/main/java17/org/codehaus/plexus/archivers/config/UnArchiverConfigurer.java index 5baed5d99..f28c4df69 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/UnArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/UnArchiverConfigurer.java @@ -15,11 +15,12 @@ * */ -package org.codehaus.plexus.archiver; +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; diff --git a/src/main/java17/org.codehaus.plexus.archivers/config/UnixPermissions.java b/src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java similarity index 97% rename from src/main/java17/org.codehaus.plexus.archivers/config/UnixPermissions.java rename to src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java index d629df7f4..4ec6bd31b 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/config/UnixPermissions.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archiver; +package org.codehaus.plexus.archivers.config; import java.nio.file.attribute.PosixFilePermission; import java.util.Objects; diff --git a/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java similarity index 95% rename from src/main/java17/org.codehaus.plexus.archivers/spi/AbstractArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java index b860e21ea..d9aae44fd 100644 --- a/src/main/java17/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.archiver.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; /** * Base implementation that keeps unconfigured archiver creation internal to service providers. diff --git a/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractPlexusIoResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java similarity index 94% rename from src/main/java17/org.codehaus.plexus.archivers/spi/AbstractPlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java index e812594a5..3e510f3a3 100644 --- a/src/main/java17/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.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org.codehaus.plexus.archivers/spi/AbstractUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java similarity index 95% rename from src/main/java17/org.codehaus.plexus.archivers/spi/AbstractUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java index 935af0932..40c03ee73 100644 --- a/src/main/java17/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.archiver.UnArchiverConfigurer; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; /** * Base implementation that keeps unconfigured unarchiver creation internal to service providers. diff --git a/src/main/java17/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/java17/org.codehaus.plexus.archivers/spi/ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/ArchiverProvider.java index 0389523a1..2a1c797c6 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/spi/ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/ArchiverProvider.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.ArchiverConfigurer; +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/java17/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/java17/org.codehaus.plexus.archivers/spi/PlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java index d45517c41..52fd9ab9b 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/spi/PlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java @@ -19,7 +19,7 @@ import java.util.function.Consumer; -import org.codehaus.plexus.archiver.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org.codehaus.plexus.archivers/spi/UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java similarity index 93% rename from src/main/java17/org.codehaus.plexus.archivers/spi/UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java index ec8812348..d53a05a2e 100644 --- a/src/main/java17/org.codehaus.plexus.archivers/spi/UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archiver.UnArchiverConfigurer; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; /** * Service provider for a named archive extraction format. From 54f05b3777baf64fe6d95d6a6cd80fb05cebe112 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Tue, 25 Aug 2026 16:38:01 +0200 Subject: [PATCH 07/20] fix symlinkhandling --- .../PlexusIoResourceCollectionProviderIT.java | 2 +- .../plexus/archiver/SymbolicLinkHandling.java | 46 ------------------- .../config/SymbolicLinkHandling.java | 8 ++-- .../codehaus/plexus/archiver/SymlinkTest.java | 16 ------- 4 files changed, 5 insertions(+), 67 deletions(-) delete mode 100644 src/main/java/org/codehaus/plexus/archiver/SymbolicLinkHandling.java diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java index 5bcff6c91..fed965dfb 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java @@ -97,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/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/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java b/src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java index babb40403..49a180845 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/SymbolicLinkHandling.java @@ -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/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()); - } } From 89d5264a3399ce39b8ade85ab37d66f840761324 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Wed, 26 Aug 2026 11:46:15 +0200 Subject: [PATCH 08/20] Introduce ArchiverManager for creating default archiveManager --- .../plexus/archiver/manager/CdiFactoryIT.java | 8 +- .../ServiceLoaderArchiverManagerIT.java | 8 +- .../archiver/manager/ArchiverFactory.java | 42 ++++++- .../archiver/manager/ArchiverManager.java | 104 ------------------ .../archiver/manager/ArchiverManagers.java | 46 ++++++++ .../PlexusIoResourceCollectionFactory.java | 2 +- .../manager/ServiceLoaderArchiverManager.java | 33 ++++-- .../archiver/manager/UnArchiverFactory.java | 2 +- 8 files changed, 116 insertions(+), 129 deletions(-) delete mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java create mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManagers.java diff --git a/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java index 4e469bea8..b88e13179 100644 --- a/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java @@ -34,8 +34,8 @@ class CdiFactoryIT { void createsConfiguredArchivers(@TempDir Path directory) { CdiArchiverFactory factory = new CdiArchiverFactory(ZipArchiver::new); - var first = factory.create(configurer -> configurer.setDestFile(directory.resolve("first.zip"))); - var second = factory.create(configurer -> configurer.setDestFile(directory.resolve("second.zip"))); + var first = factory.configure(configurer -> configurer.setDestFile(directory.resolve("first.zip"))); + var second = factory.configure(configurer -> configurer.setDestFile(directory.resolve("second.zip"))); assertThat(first).isNotSameAs(second); assertThat(first.getDestFile()).isEqualTo(directory.resolve("first.zip").toFile()); @@ -47,7 +47,7 @@ void createsConfiguredArchivers(@TempDir Path directory) { void createsConfiguredUnarchivers(@TempDir Path directory) { CdiUnArchiverFactory factory = new CdiUnArchiverFactory(ZipUnArchiver::new); - var unarchiver = factory.create(configurer -> configurer.setSource(directory.resolve("source.zip"))); + var unarchiver = factory.configure(configurer -> configurer.setSource(directory.resolve("source.zip"))); assertThat(unarchiver.getSourceFile()) .isEqualTo(directory.resolve("source.zip").toFile()); @@ -59,7 +59,7 @@ void createsConfiguredResourceCollections(@TempDir Path directory) { new CdiPlexusIoResourceCollectionFactory(PlexusArchiverZipFileResourceCollection::new); var collection = (AbstractPlexusIoArchiveResourceCollection) - factory.create(configurer -> configurer.setSource(directory.resolve("source.zip"))); + factory.configure(configurer -> configurer.setSource(directory.resolve("source.zip"))); assertThat(collection.getFile()) .isEqualTo(directory.resolve("source.zip").toFile()); diff --git a/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java index 692f04692..6c476af5a 100644 --- a/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java @@ -193,14 +193,14 @@ void configuredLookups(@TempDir File tempDirectory) throws Exception { File outputDirectory = new File(tempDirectory, "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 -> { + Archiver archiver = archiverFactory.configure(configurer -> configurer.setDestFile(archiveFile.toPath())); + Archiver secondArchiver = archiverFactory.configure(configurer -> {}); + UnArchiver unarchiver = manager.getUnArchiverFactory(archiveFile).configure(configurer -> { configurer.setSource(archiveFile.toPath()); configurer.setDestinationDirectory(outputDirectory.toPath()); }); AbstractPlexusIoArchiveResourceCollection resourceCollection = (AbstractPlexusIoArchiveResourceCollection) - manager.getResourceCollectionFactory(archiveFile).create(configurer -> { + manager.getResourceCollectionFactory(archiveFile).configure(configurer -> { configurer.setSource(archiveFile.toPath()); configurer.setPrefix("content/"); }); diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java index 344f534e9..7e671425e 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java @@ -29,11 +29,45 @@ */ @FunctionalInterface public interface ArchiverFactory { + /** + * Creates a new archiver instance for manual configuration. + * + * In legacy code, consumers mutate the returned archiver directly: + *
{@code
+     * Archiver archiver = factory.create();
+     * archiver.setDestFile(file);
+     * archiver.addFileSet(fileSet);
+     * archiver.createArchive();
+     * }
+ * + * @return a new mutable archiver instance + */ Archiver create(); - default Archiver create(Consumer configurer) { - Archiver archiver = create(); - configurer.accept(ArchiverConfigurer.of(archiver)); - return archiver; + /** + * Creates and configures an archiver using the configurer API. + * + *

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

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

This is the recommended way to obtain an ArchiverManager for standard + * usage. For custom implementations, construct them directly. + * + * @since 5.0.0 + */ +public final class ArchiverManagers { + + private ArchiverManagers() { + } + + public static ArchiverManager create() { + return new ServiceLoaderArchiverManager(); + } + + public static ArchiverManager create(ClassLoader classLoader) { + return new ServiceLoaderArchiverManager(classLoader); + } + + public static ArchiverManager create(ModuleLayer moduleLayer) { + return new ServiceLoaderArchiverManager(moduleLayer); + } + +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java index ca6d11883..aede1f1d6 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java @@ -31,7 +31,7 @@ public interface PlexusIoResourceCollectionFactory { PlexusIoResourceCollection create(); - default PlexusIoResourceCollection create(Consumer configurer) { + default PlexusIoResourceCollection configure(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 index 39d3135aa..9b81b9b9c 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -33,27 +33,38 @@ import org.codehaus.plexus.archivers.spi.UnArchiverProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; -public class ServiceLoaderArchiverManager extends AbstractArchiverManager { +class ServiceLoaderArchiverManager extends AbstractArchiverManager { - public ServiceLoaderArchiverManager() { - super(archivers(), unarchivers(), plexusIoResourceCollections()); + ServiceLoaderArchiverManager() { + super(archivers(ServiceLoader.load(ArchiverProvider.class)), + unarchivers(ServiceLoader.load(UnArchiverProvider.class)), + plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class))); } - private static Map archivers() { - return StreamSupport.stream(ServiceLoader.load(ArchiverProvider.class).spliterator(), false) + 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() { + 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() { - return StreamSupport.stream( - ServiceLoader.load(PlexusIoResourceCollectionProvider.class) - .spliterator(), - false) + private static Map plexusIoResourceCollections(ServiceLoader serviceLoader) { + return StreamSupport.stream(serviceLoader.spliterator(),false) .collect(Collectors.toMap( PlexusIoResourceCollectionProvider::getName, ServiceLoaderArchiverManager::toPlexusIoResourceCollectionFactory)); diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java index 2dbb662e6..4a58ca104 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java @@ -31,7 +31,7 @@ public interface UnArchiverFactory { UnArchiver create(); - default UnArchiver create(Consumer configurer) { + default UnArchiver configure(Consumer configurer) { UnArchiver unArchiver = create(); configurer.accept(UnArchiverConfigurer.of(unArchiver)); return unArchiver; From f3eced6b83e1a7a288a9d6a93f9fcbb0797a6ae2 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Fri, 4 Sep 2026 15:27:55 +0200 Subject: [PATCH 09/20] restore test --- .../codehaus/plexus/archiver/SymlinkTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java index f2fa855e0..5f899aaf3 100644 --- a/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/SymlinkTest.java @@ -140,4 +140,20 @@ 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(new DefaultFileSet(dummyContent).followingSymLinks(true)); + 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()); + } } From ab7eaffebfa10857e33f38931e5f59c2d8d2e184 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 5 Sep 2026 11:07:30 +0200 Subject: [PATCH 10/20] rename spi package to provider --- .../archivers/{spi => provider}/ArchiverProviderIT.java | 4 +++- .../PlexusIoResourceCollectionProviderIT.java | 4 +++- .../archivers/{spi => provider}/UnArchiverProviderIT.java | 4 +++- .../plexus/archiver/bzip2/BZip2ArchiverProvider.java | 2 +- .../plexus/archiver/bzip2/BZip2UnArchiverProvider.java | 2 +- .../bzip2/PlexusIoBz2ResourceCollectionProvider.java | 2 +- .../bzip2/PlexusIoBzip2ResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/car/CarUnArchiverProvider.java | 2 +- .../car/PlexusIoCarFileResourceCollectionProvider.java | 2 +- .../plexus/archiver/dir/DirectoryArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/ear/EarArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/ear/EarUnArchiverProvider.java | 2 +- .../ear/PlexusIoEarFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java | 2 +- .../esb/PlexusIoEsbFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/gzip/GZipArchiverProvider.java | 2 +- .../plexus/archiver/gzip/GZipUnArchiverProvider.java | 2 +- .../archiver/gzip/PlexusIoGzResourceCollectionProvider.java | 2 +- .../gzip/PlexusIoGzipResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/jar/JarArchiverProvider.java | 2 +- .../archiver/jar/JarToolModularJarArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/jar/JarUnArchiverProvider.java | 2 +- .../jar/PlexusIoJarFileResourceCollectionProvider.java | 2 +- .../archiver/manager/ServiceLoaderArchiverManager.java | 6 +++--- .../codehaus/plexus/archiver/nar/NarUnArchiverProvider.java | 2 +- .../nar/PlexusIoNarFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/par/ParUnArchiverProvider.java | 2 +- .../par/PlexusIoParFileResourceCollectionProvider.java | 2 +- .../rar/PlexusIoRarFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/rar/RarArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/rar/RarUnArchiverProvider.java | 2 +- .../DefaultPlexusIoFileResourceCollectionProvider.java | 2 +- .../resources/PlexusIoFileResourceCollectionProvider.java | 2 +- .../sar/PlexusIoSarFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/sar/SarUnArchiverProvider.java | 2 +- .../snappy/PlexusIoSnappyResourceCollectionProvider.java | 2 +- .../plexus/archiver/snappy/SnappyArchiverProvider.java | 2 +- .../plexus/archiver/snappy/SnappyUnArchiverProvider.java | 2 +- .../swc/PlexusIoSwcFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java | 2 +- .../tar/PlexusIoTBZ2FileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTGZFileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTXZFileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTZstdFileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTarBZip2FileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTarFileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTarGZipFileResourceCollectionProvider.java | 2 +- .../PlexusIoTarSnappyFileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTarXZFileResourceCollectionProvider.java | 2 +- .../tar/PlexusIoTarZstdFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java | 2 +- .../plexus/archiver/tar/TBZ2UnArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TGZArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TXZArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TZstdArchiverProvider.java | 2 +- .../plexus/archiver/tar/TZstdUnArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TarArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarBZip2ArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarBZip2UnArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarGZipArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarGZipUnArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarSnappyArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarSnappyUnArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TarUnArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/tar/TarXZArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarXZUnArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarZstdArchiverProvider.java | 2 +- .../plexus/archiver/tar/TarZstdUnArchiverProvider.java | 2 +- .../war/PlexusIoWarFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/war/WarArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/war/WarUnArchiverProvider.java | 2 +- .../archiver/xz/PlexusIoXZResourceCollectionProvider.java | 2 +- .../org/codehaus/plexus/archiver/xz/XZArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/xz/XZUnArchiverProvider.java | 2 +- .../PlexusArchiverZipFileResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/zip/ZipArchiverProvider.java | 2 +- .../codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java | 2 +- .../zstd/PlexusIoZstdResourceCollectionProvider.java | 2 +- .../codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java | 2 +- .../plexus/archiver/zstd/ZstdUnArchiverProvider.java | 2 +- .../{spi => provider}/AbstractArchiverProvider.java | 2 +- .../AbstractPlexusIoResourceCollectionProvider.java | 2 +- .../{spi => provider}/AbstractUnArchiverProvider.java | 2 +- .../archivers/{spi => provider}/ArchiverProvider.java | 2 +- .../PlexusIoResourceCollectionProvider.java | 2 +- .../archivers/{spi => provider}/UnArchiverProvider.java | 2 +- ...org.codehaus.plexus.archivers.provider.ArchiverProvider} | 0 ...s.archivers.provider.PlexusIoResourceCollectionProvider} | 0 ...g.codehaus.plexus.archivers.provider.UnArchiverProvider} | 0 91 files changed, 96 insertions(+), 90 deletions(-) rename src/it/java17/org/codehaus/plexus/archivers/{spi => provider}/ArchiverProviderIT.java (98%) rename src/it/java17/org/codehaus/plexus/archivers/{spi => provider}/PlexusIoResourceCollectionProviderIT.java (96%) rename src/it/java17/org/codehaus/plexus/archivers/{spi => provider}/UnArchiverProviderIT.java (94%) rename src/main/java17/org/codehaus/plexus/archivers/{spi => provider}/AbstractArchiverProvider.java (96%) rename src/main/java17/org/codehaus/plexus/archivers/{spi => provider}/AbstractPlexusIoResourceCollectionProvider.java (97%) rename src/main/java17/org/codehaus/plexus/archivers/{spi => provider}/AbstractUnArchiverProvider.java (96%) rename src/main/java17/org/codehaus/plexus/archivers/{spi => provider}/ArchiverProvider.java (96%) rename src/main/java17/org/codehaus/plexus/archivers/{spi => provider}/PlexusIoResourceCollectionProvider.java (96%) rename src/main/java17/org/codehaus/plexus/archivers/{spi => provider}/UnArchiverProvider.java (95%) rename src/main/resources/META-INF/services/{org.codehaus.plexus.archivers.spi.ArchiverProvider => org.codehaus.plexus.archivers.provider.ArchiverProvider} (100%) rename src/main/resources/META-INF/services/{org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider => org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider} (100%) rename src/main/resources/META-INF/services/{org.codehaus.plexus.archivers.spi.UnArchiverProvider => org.codehaus.plexus.archivers.provider.UnArchiverProvider} (100%) diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java similarity index 98% rename from src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java rename to src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index b448b5472..a3b1c741e 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.lang.reflect.Modifier; import java.nio.file.Path; @@ -40,6 +40,8 @@ import org.codehaus.plexus.archivers.config.FileSetSpec; import org.codehaus.plexus.archivers.config.PermissionHandling; import org.codehaus.plexus.archivers.config.UnixPermissions; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.ArchiverProvider; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java similarity index 96% rename from src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java rename to src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java index fed965dfb..31018f3d4 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; @@ -33,6 +33,8 @@ 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.archivers.provider.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoCompressedFileResourceCollection; diff --git a/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java similarity index 94% rename from src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java rename to src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java index e5f8802fe..6a1f0e3f8 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/spi/UnArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.lang.reflect.Modifier; import java.nio.file.Path; @@ -28,6 +28,8 @@ 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.archivers.provider.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.UnArchiverProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java index 792a9565e..ada3521ad 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2ArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.bzip2; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java index ac9328c36..6b3ea1bfc 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/BZip2UnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.bzip2; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java index b8f0f7e20..0b13534b4 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBz2ResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.bzip2; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java index 0190c9b5b..55c2f0224 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/bzip2/PlexusIoBzip2ResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.bzip2; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java index b7594a3a1..1b1581b33 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/car/CarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.car; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java index dc3bb9c88..6f59dc951 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/car/PlexusIoCarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.car; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java index 3e436ec38..72b76a982 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/dir/DirectoryArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.dir; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java index 26321adca..2dbd6ae1c 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ear/EarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.ear; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java index edef82dbd..4e3cc99dc 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ear/EarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.ear; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java index 57200416d..73d078c0b 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ear/PlexusIoEarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.ear; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java index e35fe3f31..7b1afdb1d 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/esb/EsbUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.esb; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java index 58e54e5c4..18e64e9b7 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/esb/PlexusIoEsbFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.esb; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java index 44c03d2d7..611301801 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.gzip; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java index c4d491fa3..e6fcabdf3 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/GZipUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.gzip; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java index 5057cf2be..7e54bf9b7 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.gzip; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java index 2304b81cf..e9754dccb 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/gzip/PlexusIoGzipResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.gzip; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java index 979dfe710..7080e2070 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/JarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.jar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java index 1112a6317..d041ebfce 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.jar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java index 7129a8e29..859410800 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/JarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.jar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java index 26b53fd7b..9cf1d1fd2 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/jar/PlexusIoJarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.jar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java index 9b81b9b9c..563e9fc58 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -28,9 +28,9 @@ 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.archivers.provider.ArchiverProvider; +import org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.UnArchiverProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; class ServiceLoaderArchiverManager extends AbstractArchiverManager { diff --git a/src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java index e61bfbd57..2dd2cd841 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/nar/NarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.nar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java index b5d6c7940..41705c58a 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/nar/PlexusIoNarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.nar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java index 7c1d382ac..bb840434f 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/par/ParUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.par; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java index 59783a565..0296dc55b 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/par/PlexusIoParFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.par; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java index 684211b9f..b96601612 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/rar/PlexusIoRarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.rar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java index 0f963e9e2..e96294efd 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/rar/RarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.rar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java index 2e207d43b..7c2b63bcd 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/rar/RarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.rar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java index 817c471a0..3c490656a 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/resources/DefaultPlexusIoFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.resources; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.DefaultPlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; diff --git a/src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java index ee49b87d9..218198d66 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/resources/PlexusIoFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.resources; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; diff --git a/src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java index 0e322cbb1..f60f82f76 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/sar/PlexusIoSarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.sar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java index d61da4908..8ab665685 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/sar/SarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.sar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java index f5cd4696f..8ae4059d8 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/snappy/PlexusIoSnappyResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.snappy; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java index d3dc2ec96..24f23ecc8 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.snappy; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java index e7e988cad..d55ed4192 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/snappy/SnappyUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.snappy; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java index 0883e3595..3eec8aa59 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/swc/PlexusIoSwcFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.swc; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java index 8057ce9c1..d1356964e 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/swc/SwcUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.swc; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java index 375f6099d..968af9b4c 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTBZ2FileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java index 1452c0dba..1e60724fb 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTGZFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java index 8e2af26df..ab961e138 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTXZFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java index 844ddf395..e676fc753 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTZstdFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java index 607545f9b..0c8391ca8 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarBZip2FileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java index 6ebe89aae..c226996a6 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java index 030a255d9..6b9e88002 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarGZipFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java index d6c591f67..1ae674ba8 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarSnappyFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java index 5001fdeeb..3cfd0cfd2 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarXZFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java index 720943ff1..a1f56ad51 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/PlexusIoTarZstdFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.tar; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java index a9097569c..7e30cb433 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2ArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java index 885fc039d..b9075bd27 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TBZ2UnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java index 35faec1ff..61e9966d4 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java index 150984e68..a284c924b 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TGZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java index ae427ade8..d6a44d221 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java index 9e2c0e8f0..9369bd51e 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TXZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java index 79e229be1..eecc77dd8 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java index 98090f19b..ad483a60a 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TZstdUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java index 94a180a25..7d9c6eb49 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java index a895658e0..b51b14483 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2ArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java index a38de3a50..6ad5bc145 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarBZip2UnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java index da7aaf327..4e848bd5c 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java index e45361d2d..56b139e62 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarGZipUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java index 785413cec..742d77a25 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java index 1487b1b1c..a5ad7b749 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarSnappyUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java index ef643d38e..b8d13b290 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java index e4a231656..335babd69 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java index 6d68e45c7..9a40417ff 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarXZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java index 858e67229..a14986937 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java index fd5098f93..f67c88626 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/tar/TarZstdUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java index 02252fa3b..c7cbaefe0 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/war/PlexusIoWarFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.war; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java index 38594bde6..469f60852 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/war/WarArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.war; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java index 9c4c5d6ee..6df9f7437 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/war/WarUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.war; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java index 87a3eef22..d3d77c8e1 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/xz/PlexusIoXZResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.xz; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java index f1400955b..6b3f57a74 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/xz/XZArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.xz; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java index 07c407ce5..28229ffe8 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/xz/XZUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.xz; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java index 76a58b870..eb4311250 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zip/PlexusArchiverZipFileResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.zip; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java index 41b91bdda..ba60fc034 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zip; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java index 9e693f4d9..828605241 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zip/ZipUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zip; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java index 93da8de6f..4dffe54c3 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zstd/PlexusIoZstdResourceCollectionProvider.java @@ -17,7 +17,7 @@ package org.codehaus.plexus.archiver.zstd; -import org.codehaus.plexus.archivers.spi.AbstractPlexusIoResourceCollectionProvider; +import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** diff --git a/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java index 23e675b2b..ac97ff465 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zstd; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archivers.spi.AbstractArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java index 83821db40..36e5d2670 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archiver/zstd/ZstdUnArchiverProvider.java @@ -18,7 +18,7 @@ package org.codehaus.plexus.archiver.zstd; import org.codehaus.plexus.archiver.UnArchiver; -import org.codehaus.plexus.archivers.spi.AbstractUnArchiverProvider; +import org.codehaus.plexus.archivers.provider.AbstractUnArchiverProvider; /** * @since 5.0.0 diff --git a/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java similarity index 96% rename from src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java index d9aae44fd..3bf717edb 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.Objects; import java.util.function.Consumer; diff --git a/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java similarity index 97% rename from src/main/java17/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java index 3e510f3a3..72a387c9b 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractPlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.Objects; import java.util.function.Consumer; diff --git a/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractUnArchiverProvider.java similarity index 96% rename from src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/AbstractUnArchiverProvider.java index 40c03ee73..fed91e13d 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/spi/AbstractUnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractUnArchiverProvider.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.Objects; import java.util.function.Consumer; diff --git a/src/main/java17/org/codehaus/plexus/archivers/spi/ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java similarity index 96% rename from src/main/java17/org/codehaus/plexus/archivers/spi/ArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java index 2a1c797c6..3453c2bed 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/spi/ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.function.Consumer; diff --git a/src/main/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java similarity index 96% rename from src/main/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java index 52fd9ab9b..ec82df4a6 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/spi/PlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.function.Consumer; diff --git a/src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/UnArchiverProvider.java similarity index 95% rename from src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java rename to src/main/java17/org/codehaus/plexus/archivers/provider/UnArchiverProvider.java index d53a05a2e..bd2a0b246 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/spi/UnArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/UnArchiverProvider.java @@ -15,7 +15,7 @@ * */ -package org.codehaus.plexus.archivers.spi; +package org.codehaus.plexus.archivers.provider; import java.util.function.Consumer; diff --git a/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.ArchiverProvider b/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.ArchiverProvider similarity index 100% rename from src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.ArchiverProvider rename to src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.ArchiverProvider diff --git a/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider b/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider similarity index 100% rename from src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.PlexusIoResourceCollectionProvider rename to src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider diff --git a/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.UnArchiverProvider b/src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.UnArchiverProvider similarity index 100% rename from src/main/resources/META-INF/services/org.codehaus.plexus.archivers.spi.UnArchiverProvider rename to src/main/resources/META-INF/services/org.codehaus.plexus.archivers.provider.UnArchiverProvider From 86b1c2c6f5aa54dbf579f91230088d47fd975e00 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 5 Sep 2026 15:48:33 +0200 Subject: [PATCH 11/20] rename FilePErmissions --- .../provider/ArchiverProviderIT.java | 12 ++--- .../archivers/config/ArchiverConfigurer.java | 10 ++-- .../config/DefaultArchiverConfigurer.java | 50 +++++++++++-------- ...xPermissions.java => FilePermissions.java} | 35 ++++++++++--- 4 files changed, 66 insertions(+), 41 deletions(-) rename src/main/java17/org/codehaus/plexus/archivers/config/{UnixPermissions.java => FilePermissions.java} (56%) diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index a3b1c741e..e5aa7438b 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -39,7 +39,7 @@ 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.codehaus.plexus.archivers.config.FilePermissions; import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; import org.codehaus.plexus.archivers.provider.ArchiverProvider; import org.junit.jupiter.api.Test; @@ -122,10 +122,10 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { Archiver actual = providerFor(expected).newArchiver(configurer -> { configurer.setDestFile(directory.resolve("archive.zip")); - configurer.setFileMode(UnixPermissions.of(PosixFilePermissions.fromString("rw-r--r--"))); - configurer.setDefaultFileMode(UnixPermissions.of(PosixFilePermissions.fromString("rw-r-----"))); - configurer.setDirectoryMode(UnixPermissions.of(PosixFilePermissions.fromString("rwxr-xr-x"))); - configurer.setDefaultDirectoryMode(UnixPermissions.of(PosixFilePermissions.fromString("rwxr-x---"))); + configurer.setFileMode(FilePermissions.parse("rw-r--r--")); + configurer.setDefaultFileMode(FilePermissions.parse("rw-r-----")); + configurer.setDirectoryMode(FilePermissions.parse("rwxr-xr-x")); + configurer.setDefaultDirectoryMode(FilePermissions.parse("rwxr-x---")); configurer.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); configurer.setDotFileDirectory(directory); configurer.setForced(ArchiveCreation.WHEN_NEEDED); @@ -137,7 +137,7 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { configurer.setOverrideUserName("user"); configurer.setOverrideGid(1000); configurer.setOverrideGroupName("group"); - configurer.setUmask(UnixPermissions.of(PosixFilePermissions.fromString("----w--w-"))); + configurer.setUmask(FilePermissions.parse("----w--w-")); configurer.configureReproducibleBuild(c -> c.setDefaultLastModifiedTime(timestamp)); }); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index 80c831683..7fcc6b268 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -41,13 +41,13 @@ static ArchiverConfigurer of(Archiver archiver) { void setDestFile(Path destFile); - void setFileMode(UnixPermissions permissions); + void setFileMode(FilePermissions permissions); - void setDefaultFileMode(UnixPermissions permissions); + void setDefaultFileMode(FilePermissions permissions); - void setDirectoryMode(UnixPermissions permissions); + void setDirectoryMode(FilePermissions permissions); - void setDefaultDirectoryMode(UnixPermissions permissions); + void setDefaultDirectoryMode(FilePermissions permissions); void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling); @@ -71,7 +71,7 @@ static ArchiverConfigurer of(Archiver archiver) { void setOverrideGroupName(String groupName); - void setUmask(UnixPermissions permissions); + void setUmask(FilePermissions permissions); void configureReproducibleBuild(Consumer reproducibleBuildSpec); } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java index 5c352df41..2a8fe68f3 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -56,22 +56,22 @@ public void setDestFile(Path destFile) { } @Override - public void setFileMode(UnixPermissions permissions) { + public void setFileMode(FilePermissions permissions) { archiver.setFileMode(toMode(permissions)); } @Override - public void setDefaultFileMode(UnixPermissions permissions) { + public void setDefaultFileMode(FilePermissions permissions) { archiver.setDefaultFileMode(toMode(permissions)); } @Override - public void setDirectoryMode(UnixPermissions permissions) { + public void setDirectoryMode(FilePermissions permissions) { archiver.setDirectoryMode(toMode(permissions)); } @Override - public void setDefaultDirectoryMode(UnixPermissions permissions) { + public void setDefaultDirectoryMode(FilePermissions permissions) { archiver.setDefaultDirectoryMode(toMode(permissions)); } @@ -147,7 +147,7 @@ public void setOverrideGroupName(String groupName) { } @Override - public void setUmask(UnixPermissions permissions) { + public void setUmask(FilePermissions permissions) { archiver.setUmask(toMode(permissions)); } @@ -158,23 +158,29 @@ public void configureReproducibleBuild(Consumer spe spec.accept(configurer); } - private static int toMode(UnixPermissions unixPermissions) { - int mode = 0; - for (PosixFilePermission permission : - Objects.requireNonNull(unixPermissions, "unixPermissions").asPosixFilePermissions()) { - mode |= switch (permission) { - case OWNER_READ -> 0_400; - case OWNER_WRITE -> 0_200; - case OWNER_EXECUTE -> 0_100; - case GROUP_READ -> 0_040; - case GROUP_WRITE -> 0_020; - case GROUP_EXECUTE -> 0_010; - case OTHERS_READ -> 0_004; - case OTHERS_WRITE -> 0_002; - case OTHERS_EXECUTE -> 0_001; - }; - } - return mode; + private static int toMode(FilePermissions filePermissions) { + if(filePermissions instanceof PosixPermissions permissions) { + int mode = 0; + for (PosixFilePermission permission : + Objects.requireNonNull(permissions, "unixPermissions").permissions()) { + mode |= switch (permission) { + case OWNER_READ -> 0_400; + case OWNER_WRITE -> 0_200; + case OWNER_EXECUTE -> 0_100; + case GROUP_READ -> 0_040; + case GROUP_WRITE -> 0_020; + case GROUP_EXECUTE -> 0_010; + case OTHERS_READ -> 0_004; + case OTHERS_WRITE -> 0_002; + case OTHERS_EXECUTE -> 0_001; + }; + } + return mode; + } else if(filePermissions instanceof ModePermissions permissions) { + return permissions.mode(); + } else { + throw new IncompatibleClassChangeError(); + } } } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java similarity index 56% rename from src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java rename to src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java index 4ec6bd31b..21326d4f5 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/UnixPermissions.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java @@ -18,34 +18,53 @@ package org.codehaus.plexus.archivers.config; import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; import java.util.Objects; import java.util.Set; /** - * Unix permissions applied to archive entries or used as an archive umask. + * File permissions applied to archive entries or used as an archive umask. * * @since 5.0.0 */ -public abstract sealed class UnixPermissions permits PosixPermissions { +public abstract sealed class FilePermissions permits PosixPermissions, ModePermissions { - UnixPermissions() {} + FilePermissions() {} - public static UnixPermissions of(Set permissions) { + public static FilePermissions of(Set permissions) { return new PosixPermissions(permissions); } - public abstract Set asPosixFilePermissions(); + public static FilePermissions parse(String pattern) { + return new PosixPermissions(PosixFilePermissions.fromString(pattern)); + } + + public static FilePermissions ofMode(int mode) { + return new ModePermissions(mode); + } } -final class PosixPermissions extends UnixPermissions { + +final class PosixPermissions extends FilePermissions { final Set permissions; PosixPermissions(Set permissions) { this.permissions = Set.copyOf(Objects.requireNonNull(permissions, "permissions")); } - @Override - public Set asPosixFilePermissions() { + public Set permissions() { return permissions; } } +final class ModePermissions extends FilePermissions { + final int mode; + + public ModePermissions(int mode) { + this.mode = mode; + } + + int mode() { + return mode; + } +} + From d09feeb568c26ae786c1c904871a27df751e0e73 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 5 Sep 2026 20:00:24 +0200 Subject: [PATCH 12/20] add javadoc --- .../archivers/config/ArchiverConfigurer.java | 20 +++++++ .../archivers/config/FilePermissions.java | 59 +++++++++++++++++-- 2 files changed, 75 insertions(+), 4 deletions(-) diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index 7fcc6b268..f0ab85392 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -41,12 +41,32 @@ static ArchiverConfigurer of(Archiver archiver) { void setDestFile(Path destFile); + /** + * Sets the permissions used for regular files added to the archive. + * + * @param permissions the file permissions + */ void setFileMode(FilePermissions permissions); + /** + * Sets the default permissions used for regular files when no explicit mode is available. + * + * @param permissions the default file permissions + */ void setDefaultFileMode(FilePermissions permissions); + /** + * Sets the permissions used for directories added to the archive. + * + * @param permissions the directory permissions + */ void setDirectoryMode(FilePermissions permissions); + /** + * Sets the default permissions used for directories when no explicit mode is available. + * + * @param permissions the default directory permissions + */ void setDefaultDirectoryMode(FilePermissions permissions); void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java index 21326d4f5..9382ba70c 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java @@ -14,7 +14,6 @@ * limitations under the License. * */ - package org.codehaus.plexus.archivers.config; import java.nio.file.attribute.PosixFilePermission; @@ -23,28 +22,69 @@ import java.util.Set; /** - * File permissions applied to archive entries or used as an archive umask. + * Represents archive file permissions or modes in a form suitable for archiver configuration. + *

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

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

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

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

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

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

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

+ * + * @since 5.0.0 + */ final class PosixPermissions extends FilePermissions { final Set permissions; @@ -56,6 +96,17 @@ public Set permissions() { return permissions; } } + +/** + * Numeric archive permissions represented as a Unix-style mode value. + *

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

+ * + * @since 5.0.0 + */ final class ModePermissions extends FilePermissions { final int mode; From f321a75fe32d26c3d3a6a7b1418621633a3a2622 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 12 Sep 2026 10:01:25 +0200 Subject: [PATCH 13/20] Add docs --- .../archivers/config/FilePermissions.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java index 9382ba70c..de1a8382e 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FilePermissions.java @@ -22,7 +22,7 @@ import java.util.Set; /** - * Represents archive file permissions or modes in a form suitable for archiver configuration. + * Represents archive file permissions in a form suitable for archiver configuration. *

* This type provides a small, public abstraction over the underlying permission representation so consumers can * configure archive entry permissions using either symbolic POSIX-style permissions or numeric mode values. @@ -39,7 +39,6 @@ public sealed abstract class FilePermissions permits PosixPermissions, ModePermi * * @param permissions the POSIX permissions * @return a permission representation for archiver configuration - * @since 5.0.0 */ public static FilePermissions of(Set permissions) { return new PosixPermissions(permissions); @@ -53,13 +52,12 @@ public static FilePermissions of(Set permissions) { * {@code rw-r--r--} or {@code rwxr-xr-x}. *

* - * @param symbolicPermissions the symbolic POSIX permission string + * @param symbolicPermissions the POSIX symbolic permission string * @return a permission representation for archiver configuration - * @throws IllegalArgumentException if the string is not a valid symbolic POSIX permission value - * @since 5.0.0 + * @throws IllegalArgumentException if the string is not a valid POSIX symbolic permission value */ - public static FilePermissions parse(String pattern) { - return new PosixPermissions(PosixFilePermissions.fromString(pattern)); + public static FilePermissions parse(String symbolicPermissions) { + return new PosixPermissions(PosixFilePermissions.fromString(symbolicPermissions)); } /** @@ -70,7 +68,6 @@ public static FilePermissions parse(String pattern) { * * @param mode the numeric archive mode * @return a permission representation for archiver configuration - * @since 5.0.0 */ public static FilePermissions ofMode(int mode) { return new ModePermissions(mode); @@ -82,8 +79,6 @@ public static FilePermissions ofMode(int mode) { *

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

- * - * @since 5.0.0 */ final class PosixPermissions extends FilePermissions { final Set permissions; @@ -104,8 +99,6 @@ public Set permissions() { * This is the most convenient form for archive configuration because archive tools usually work with mode bits * rather than full filesystem permission models. *

- * - * @since 5.0.0 */ final class ModePermissions extends FilePermissions { final int mode; From 6437e98fe25755db75c234870c94eba3d4b6c26e Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 12 Sep 2026 13:39:01 +0200 Subject: [PATCH 14/20] Refactor --- pom.xml | 106 ++++++++++++ .../provider/ArchiverProviderIT.java | 12 +- .../plexus/archiver/ArchivedFileSet.java | 138 +++++++++++++++ .../org/codehaus/plexus/archiver/FileSet.java | 162 ++++++++++++++++++ .../archivers/config/ArchivedFileSetSpec.java | 128 -------------- .../archivers/config/ArchiverConfigurer.java | 6 +- .../config/DefaultArchiverConfigurer.java | 8 +- .../plexus/archivers/config/FileSetSpec.java | 139 --------------- 8 files changed, 420 insertions(+), 279 deletions(-) create mode 100644 src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java create mode 100644 src/main/java17/org/codehaus/plexus/archiver/FileSet.java delete mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java delete mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java diff --git a/pom.xml b/pom.xml index 929f80c49..6d7798b7d 100644 --- a/pom.xml +++ b/pom.xml @@ -209,4 +209,110 @@ + + + java17 + + [17,) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + java17-main + + compile + + + 17 + + ${project.basedir}/src/main/java17 + + true + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + compile-java17-integration-tests + + run + + pre-integration-test + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + ${project.build.directory}/${project.build.finalName}.jar + ${project.build.directory}/it-classes + true + + **/*IT.class + + + + + + integration-test + verify + + + + + + + + + plexus-release + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.5.0 + + + enforce-java-17-for-release + + enforce + + + + + [17,) + To release this MultiRelease jar, use at least Java 17 + + + + + + + + + + diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index e5aa7438b..88eb56526 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -30,14 +30,12 @@ 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.FilePermissions; import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; @@ -73,13 +71,14 @@ void configuresNewArchiverWithoutExposingFileSetImplementations(@TempDir Path di CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - Archiver actual = provider.newArchiver(configurer -> configurer.addFileSetFromSpec(FileSetSpec.of(directory) + Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.of(directory) .prefixed("content/") .including(List.of("**/*.txt")) .excluding(List.of("**/ignored.txt")) .caseSensitive(CaseSensitivity.INSENSITIVE) .usingDefaultExcludes(DefaultExcludes.IGNORE) - .emptyDirectories(EmptyDirectoryHandling.EXCLUDE))); + .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) + .build())); assertThat(actual).isSameAs(expected); assertThat(expected.fileSet.getDirectory()).isEqualTo(directory.toFile()); @@ -97,13 +96,14 @@ void configuresArchivedFileSet(@TempDir Path directory) { CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - provider.newArchiver(configurer -> configurer.addArchivedFileSetFromSpec(ArchivedFileSetSpec.of(archive) + provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.of(archive) .prefixed("lib/") .including(List.of("**/*.class")) .excluding(List.of("module-info.class")) .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) .usingDefaultExcludes(DefaultExcludes.IGNORE) - .emptyDirectories(EmptyDirectoryHandling.EXCLUDE))); + .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) + .build())); assertThat(expected.archivedFileSet.getArchive()).isEqualTo(archive.toFile()); assertThat(expected.archivedFileSet.getPrefix()).isEqualTo("lib/"); diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java new file mode 100644 index 000000000..67d8ea750 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -0,0 +1,138 @@ +package org.codehaus.plexus.archiver; + + +import javax.annotation.CheckForNull; + +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; +import org.codehaus.plexus.archivers.config.CaseSensitivities; +import org.codehaus.plexus.archivers.config.CaseSensitivity; +import org.codehaus.plexus.archivers.config.DefaultExcludes; +import org.codehaus.plexus.archivers.config.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 java.io.File; +import java.nio.file.Path; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +/** + * A file set, which consists of the files and directories in + * an archive. + * + * @since 1.0-alpha-9 + */ +public interface ArchivedFileSet extends BaseFileSet { + + /** + * Returns the archive file. + */ + @CheckForNull + File getArchive(); + + + /** + * + * @param archive + * @return + * @since 5.0.0 + */ + public static Builder of(Path archive) { + return new Builder(archive); + } + + /** + * @since 5.0.0 + */ + static final class Builder { + private final Path archive; + private String prefix; + private Collection includes; + private Collection excludes; + private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; + private DefaultExcludes defaultExcludes = DefaultExcludes.USE; + private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; + private Collection fileSelectors; + private InputStreamTransformer streamTransformer; + private Collection fileMappers; + + private Builder(Path archive) { + this.archive = Objects.requireNonNull(archive, "archive"); + } + + public Builder prefixed(String prefix) { + this.prefix = prefix; + return this; + } + + public Builder including(Collection includes) { + this.includes = List.copyOf(includes); + return this; + } + + public Builder excluding(Collection excludes) { + this.excludes = List.copyOf(excludes); + return this; + } + + public Builder caseSensitive(CaseSensitivity caseSensitivity) { + this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); + return this; + } + + public Builder usingDefaultExcludes(DefaultExcludes defaultExcludes) { + this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); + return this; + } + + public Builder emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { + this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); + return this; + } + + public Builder selectedBy(Collection fileSelectors) { + this.fileSelectors = List.copyOf(fileSelectors); + return this; + } + + public Builder transformedBy(InputStreamTransformer streamTransformer) { + this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); + return this; + } + + public Builder mappedBy(Collection fileMappers) { + this.fileMappers = List.copyOf(fileMappers); + return this; + } + + public ArchivedFileSet build() { + DefaultArchivedFileSet fileSet = new DefaultArchivedFileSet(archive.toFile()); + fileSet.setPrefix(prefix); + fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); + fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); + fileSet.setCaseSensitive(isCaseSensitive()); + fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); + fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); + fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); + if (streamTransformer != null) { + fileSet.setStreamTransformer(streamTransformer); + } + fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); + return fileSet; + } + + private boolean isCaseSensitive() { + return CaseSensitivities.resolve(caseSensitivity); + } + + private boolean usesBuiltInDefaultExcludes() { + return defaultExcludes == DefaultExcludes.USE; + } + + private boolean includesEmptyDirectories() { + return emptyDirectoryHandling == EmptyDirectoryHandling.INCLUDE; + } + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java new file mode 100644 index 000000000..d12fde89f --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java @@ -0,0 +1,162 @@ +package org.codehaus.plexus.archiver; + + +import java.io.File; +import java.nio.file.Path; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.archivers.config.CaseSensitivities; +import org.codehaus.plexus.archivers.config.CaseSensitivity; +import org.codehaus.plexus.archivers.config.DefaultExcludes; +import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.SymbolicLinkHandling; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +/** + * A file set, which consists of the files and directories in + * a common base directory. + * + * @since 1.0-alpha-9 + */ +public interface FileSet extends BaseFileSet { + + /** + * Returns the file sets base directory. + */ + File getDirectory(); + + /** + * Returns whether symbolic links below the base directory are followed. + *

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

+ * Following links means the scan can descend into a directory that links back to one of its own + * ancestors, so only enable it for trees known not to contain such cycles. + * + * @since 4.14.0 + */ + default boolean isFollowingSymLinks() { + return false; + } + + /** + * + * @param directory + * @return + * @since 5.0.0 + */ + public static Builder of(Path directory) { + return new Builder(directory); + } + + /** + * @since 5.0.0 + */ + static final class Builder { + private final Path directory; + private String prefix; + private Collection includes; + private Collection excludes; + private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; + private DefaultExcludes defaultExcludes = DefaultExcludes.USE; + private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; + private SymbolicLinkHandling symbolicLinkHandling = SymbolicLinkHandling.PRESERVE; + private Collection fileSelectors; + private InputStreamTransformer streamTransformer; + private Collection fileMappers; + + private Builder(Path directory) { + this.directory = Objects.requireNonNull(directory, "directory"); + } + + public Builder prefixed(String prefix) { + this.prefix = prefix; + return this; + } + + public Builder including(Collection includes) { + this.includes = List.copyOf(includes); + return this; + } + + public Builder excluding(Collection excludes) { + this.excludes = List.copyOf(excludes); + return this; + } + + public Builder caseSensitive(CaseSensitivity caseSensitivity) { + this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); + return this; + } + + public Builder usingDefaultExcludes(DefaultExcludes defaultExcludes) { + this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); + return this; + } + + public Builder emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { + this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); + return this; + } + + public Builder symbolicLinks(SymbolicLinkHandling symbolicLinkHandling) { + this.symbolicLinkHandling = Objects.requireNonNull(symbolicLinkHandling, "symbolicLinkHandling"); + return this; + } + + public Builder selectedBy(Collection fileSelectors) { + this.fileSelectors = List.copyOf(fileSelectors); + return this; + } + + public Builder transformedBy(InputStreamTransformer streamTransformer) { + this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); + return this; + } + + public Builder mappedBy(Collection fileMappers) { + this.fileMappers = List.copyOf(fileMappers); + return this; + } + + public FileSet build() { + DefaultFileSet fileSet = new DefaultFileSet(directory.toFile()); + fileSet.setPrefix(prefix); + fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); + fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); + fileSet.setCaseSensitive(isCaseSensitive()); + fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); + fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); + fileSet.setFollowingSymLinks(followsSymbolicLinks()); + fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); + if (streamTransformer != null) { + fileSet.setStreamTransformer(streamTransformer); + } + fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); + return fileSet; + } + + private boolean isCaseSensitive() { + return CaseSensitivities.resolve(caseSensitivity); + } + + private boolean usesBuiltInDefaultExcludes() { + return defaultExcludes == DefaultExcludes.USE; + } + + private boolean followsSymbolicLinks() { + return symbolicLinkHandling == SymbolicLinkHandling.FOLLOW; + } + + private boolean includesEmptyDirectories() { + return emptyDirectoryHandling == EmptyDirectoryHandling.INCLUDE; + } + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java deleted file mode 100644 index ae41e1f9a..000000000 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ArchivedFileSetSpec.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.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; -import org.codehaus.plexus.components.io.functions.InputStreamTransformer; - -/** - * Fluent specification of files read from an archive. - * - * @since 5.0.0 - */ -public final class ArchivedFileSetSpec { - private final Path archive; - private String prefix; - private Collection includes; - private Collection excludes; - private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; - private DefaultExcludes defaultExcludes = DefaultExcludes.USE; - private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; - private Collection fileSelectors; - private InputStreamTransformer streamTransformer; - private Collection fileMappers; - - private ArchivedFileSetSpec(Path archive) { - this.archive = Objects.requireNonNull(archive, "archive"); - } - - public static ArchivedFileSetSpec of(Path archive) { - return new ArchivedFileSetSpec(archive); - } - - public ArchivedFileSetSpec prefixed(String prefix) { - this.prefix = prefix; - return this; - } - - public ArchivedFileSetSpec including(Collection includes) { - this.includes = List.copyOf(includes); - return this; - } - - public ArchivedFileSetSpec excluding(Collection excludes) { - this.excludes = List.copyOf(excludes); - return this; - } - - public ArchivedFileSetSpec caseSensitive(CaseSensitivity caseSensitivity) { - this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); - return this; - } - - public ArchivedFileSetSpec usingDefaultExcludes(DefaultExcludes defaultExcludes) { - this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); - return this; - } - - public ArchivedFileSetSpec emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { - this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); - return this; - } - - public ArchivedFileSetSpec selectedBy(Collection fileSelectors) { - this.fileSelectors = List.copyOf(fileSelectors); - return this; - } - - public ArchivedFileSetSpec transformedBy(InputStreamTransformer streamTransformer) { - this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); - return this; - } - - public ArchivedFileSetSpec mappedBy(Collection fileMappers) { - this.fileMappers = List.copyOf(fileMappers); - return this; - } - - ArchivedFileSet toArchivedFileSet() { - DefaultArchivedFileSet fileSet = new DefaultArchivedFileSet(archive.toFile()); - fileSet.setPrefix(prefix); - fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); - fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); - fileSet.setCaseSensitive(isCaseSensitive()); - fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); - fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); - fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); - if (streamTransformer != null) { - fileSet.setStreamTransformer(streamTransformer); - } - fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); - return fileSet; - } - - private boolean isCaseSensitive() { - return CaseSensitivities.resolve(caseSensitivity); - } - - private boolean usesBuiltInDefaultExcludes() { - return defaultExcludes instanceof BuiltInDefaultExcludes builtIn && builtIn.use; - } - - private boolean includesEmptyDirectories() { - return ((FixedEmptyDirectoryHandling) emptyDirectoryHandling).included; - } -} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index f0ab85392..23e6a48ae 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -22,7 +22,9 @@ import java.util.Comparator; import java.util.function.Consumer; +import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.FileSet; /** * Configures content on an archiver without exposing its file set implementations. @@ -35,9 +37,9 @@ static ArchiverConfigurer of(Archiver archiver) { return new DefaultArchiverConfigurer(archiver); } - void addFileSetFromSpec(FileSetSpec fileSetSpec); + void addFileSet(FileSet fileSet); - void addArchivedFileSetFromSpec(ArchivedFileSetSpec fileSetSpec); + void addArchivedFileSet(ArchivedFileSet archivedFileSet); void setDestFile(Path destFile); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java index 2a8fe68f3..d79a920e4 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -41,13 +41,13 @@ final class DefaultArchiverConfigurer implements ArchiverConfigurer { } @Override - public void addFileSetFromSpec(FileSetSpec fileSetSpec) { - archiver.addFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toFileSet()); + public void addFileSet(FileSet fileSet) { + archiver.addFileSet(Objects.requireNonNull(fileSet, "fileSet")); } @Override - public void addArchivedFileSetFromSpec(ArchivedFileSetSpec fileSetSpec) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSetSpec, "fileSetSpec").toArchivedFileSet()); + public void addArchivedFileSet(ArchivedFileSet fileSet) { + archiver.addArchivedFileSet(Objects.requireNonNull(fileSet, "fileSet")); } @Override diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java deleted file mode 100644 index 94a5c9ca3..000000000 --- a/src/main/java17/org/codehaus/plexus/archivers/config/FileSetSpec.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.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; -import org.codehaus.plexus.components.io.functions.InputStreamTransformer; - -/** - * Fluent specification of files rooted at a directory. - * - * @since 5.0.0 - */ -public final class FileSetSpec { - private final Path directory; - private String prefix; - private 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 Collection fileSelectors; - private InputStreamTransformer streamTransformer; - private Collection fileMappers; - - private FileSetSpec(Path directory) { - this.directory = Objects.requireNonNull(directory, "directory"); - } - - public static FileSetSpec of(Path directory) { - return new FileSetSpec(directory); - } - - public FileSetSpec prefixed(String prefix) { - this.prefix = prefix; - return this; - } - - public FileSetSpec including(Collection includes) { - this.includes = List.copyOf(includes); - return this; - } - - public FileSetSpec excluding(Collection excludes) { - this.excludes = List.copyOf(excludes); - return this; - } - - public FileSetSpec caseSensitive(CaseSensitivity caseSensitivity) { - this.caseSensitivity = Objects.requireNonNull(caseSensitivity, "caseSensitivity"); - return this; - } - - public FileSetSpec usingDefaultExcludes(DefaultExcludes defaultExcludes) { - this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); - return this; - } - - public FileSetSpec emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { - this.emptyDirectoryHandling = Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling"); - return this; - } - - public FileSetSpec symbolicLinks(SymbolicLinkHandling symbolicLinkHandling) { - this.symbolicLinkHandling = Objects.requireNonNull(symbolicLinkHandling, "symbolicLinkHandling"); - return this; - } - - public FileSetSpec selectedBy(Collection fileSelectors) { - this.fileSelectors = List.copyOf(fileSelectors); - return this; - } - - public FileSetSpec transformedBy(InputStreamTransformer streamTransformer) { - this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); - return this; - } - - public FileSetSpec mappedBy(Collection fileMappers) { - this.fileMappers = List.copyOf(fileMappers); - return this; - } - - FileSet toFileSet() { - DefaultFileSet fileSet = new DefaultFileSet(directory.toFile()); - fileSet.setPrefix(prefix); - fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); - fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); - fileSet.setCaseSensitive(isCaseSensitive()); - fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); - fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); - fileSet.setFollowingSymLinks(followsSymbolicLinks()); - fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); - if (streamTransformer != null) { - fileSet.setStreamTransformer(streamTransformer); - } - fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); - return fileSet; - } - - private boolean isCaseSensitive() { - return CaseSensitivities.resolve(caseSensitivity); - } - - private boolean usesBuiltInDefaultExcludes() { - return defaultExcludes instanceof BuiltInDefaultExcludes builtIn && builtIn.use; - } - - private boolean followsSymbolicLinks() { - return ((FixedSymbolicLinkHandling) symbolicLinkHandling).following; - } - - private boolean includesEmptyDirectories() { - return ((FixedEmptyDirectoryHandling) emptyDirectoryHandling).included; - } -} From 825194a1cce6d2378e4affd813b586c3113e5086 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 12 Sep 2026 17:47:22 +0200 Subject: [PATCH 15/20] adjust builder methods --- .../provider/ArchiverProviderIT.java | 20 +++++++++---------- .../plexus/archiver/ArchivedFileSet.java | 16 +++++++-------- .../org/codehaus/plexus/archiver/FileSet.java | 16 +++++++-------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index 88eb56526..2c620adc2 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -71,12 +71,12 @@ void configuresNewArchiverWithoutExposingFileSetImplementations(@TempDir Path di CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.of(directory) - .prefixed("content/") - .including(List.of("**/*.txt")) - .excluding(List.of("**/ignored.txt")) + Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.fromDirectory(directory) + .prefix("content/") + .includes(List.of("**/*.txt")) + .excludes(List.of("**/ignored.txt")) .caseSensitive(CaseSensitivity.INSENSITIVE) - .usingDefaultExcludes(DefaultExcludes.IGNORE) + .defaultExcludes(DefaultExcludes.IGNORE) .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) .build())); @@ -96,12 +96,12 @@ void configuresArchivedFileSet(@TempDir Path directory) { CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.of(archive) - .prefixed("lib/") - .including(List.of("**/*.class")) - .excluding(List.of("module-info.class")) + provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.fromArchive(archive) + .prefix("lib/") + .includes(List.of("**/*.class")) + .excludes(List.of("module-info.class")) .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) - .usingDefaultExcludes(DefaultExcludes.IGNORE) + .defaultExcludes(DefaultExcludes.IGNORE) .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) .build())); diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java index 67d8ea750..4009174c6 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -39,7 +39,7 @@ public interface ArchivedFileSet extends BaseFileSet { * @return * @since 5.0.0 */ - public static Builder of(Path archive) { + public static Builder fromArchive(Path archive) { return new Builder(archive); } @@ -62,17 +62,17 @@ private Builder(Path archive) { this.archive = Objects.requireNonNull(archive, "archive"); } - public Builder prefixed(String prefix) { + public Builder prefix(String prefix) { this.prefix = prefix; return this; } - public Builder including(Collection includes) { + public Builder includes(Collection includes) { this.includes = List.copyOf(includes); return this; } - public Builder excluding(Collection excludes) { + public Builder excludes(Collection excludes) { this.excludes = List.copyOf(excludes); return this; } @@ -82,7 +82,7 @@ public Builder caseSensitive(CaseSensitivity caseSensitivity) { return this; } - public Builder usingDefaultExcludes(DefaultExcludes defaultExcludes) { + public Builder defaultExcludes(DefaultExcludes defaultExcludes) { this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); return this; } @@ -92,17 +92,17 @@ public Builder emptyDirectories(EmptyDirectoryHandling emptyDirectoryHandling) { return this; } - public Builder selectedBy(Collection fileSelectors) { + public Builder fileSelectors(Collection fileSelectors) { this.fileSelectors = List.copyOf(fileSelectors); return this; } - public Builder transformedBy(InputStreamTransformer streamTransformer) { + public Builder streamTransformer(InputStreamTransformer streamTransformer) { this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); return this; } - public Builder mappedBy(Collection fileMappers) { + public Builder fileMappers(Collection fileMappers) { this.fileMappers = List.copyOf(fileMappers); return this; } diff --git a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java index d12fde89f..4dc6cf773 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java +++ b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java @@ -52,7 +52,7 @@ default boolean isFollowingSymLinks() { * @return * @since 5.0.0 */ - public static Builder of(Path directory) { + public static Builder fromDirectory(Path directory) { return new Builder(directory); } @@ -76,17 +76,17 @@ private Builder(Path directory) { this.directory = Objects.requireNonNull(directory, "directory"); } - public Builder prefixed(String prefix) { + public Builder prefix(String prefix) { this.prefix = prefix; return this; } - public Builder including(Collection includes) { + public Builder includes(Collection includes) { this.includes = List.copyOf(includes); return this; } - public Builder excluding(Collection excludes) { + public Builder excludes(Collection excludes) { this.excludes = List.copyOf(excludes); return this; } @@ -96,7 +96,7 @@ public Builder caseSensitive(CaseSensitivity caseSensitivity) { return this; } - public Builder usingDefaultExcludes(DefaultExcludes defaultExcludes) { + public Builder defaultExcludes(DefaultExcludes defaultExcludes) { this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); return this; } @@ -111,17 +111,17 @@ public Builder symbolicLinks(SymbolicLinkHandling symbolicLinkHandling) { return this; } - public Builder selectedBy(Collection fileSelectors) { + public Builder fileSelectors(Collection fileSelectors) { this.fileSelectors = List.copyOf(fileSelectors); return this; } - public Builder transformedBy(InputStreamTransformer streamTransformer) { + public Builder streamTransformer(InputStreamTransformer streamTransformer) { this.streamTransformer = Objects.requireNonNull(streamTransformer, "streamTransformer"); return this; } - public Builder mappedBy(Collection fileMappers) { + public Builder fileMappers(Collection fileMappers) { this.fileMappers = List.copyOf(fileMappers); return this; } From 8f8917f7b4640c1c0f2c9d7972bd3f5da5081ac4 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Tue, 29 Sep 2026 22:40:46 +0200 Subject: [PATCH 16/20] redesign --- pom.xml | 2 +- .../plexus/archiver/manager/CdiFactoryIT.java | 15 +- .../ServiceLoaderArchiverManagerIT.java | 34 ++--- .../provider/ArchiverProviderIT.java | 92 +++++++----- .../PlexusIoResourceCollectionProviderIT.java | 111 +++++++-------- .../provider/UnArchiverProviderIT.java | 2 - .../manager/AbstractArchiverManager.java | 46 +----- .../archiver/manager/ArchiverManager.java | 28 +--- .../plexus/archiver/manager/FileNames.java | 42 ++++++ .../plexus/archiver/ArchivedFileSet.java | 26 ++-- .../org/codehaus/plexus/archiver/FileSet.java | 25 ++-- .../archiver/manager/ArchiverFactory.java | 4 +- .../archiver/manager/ArchiverManager.java | 134 ++++++++++++++++++ .../PlexusIoResourceCollectionFactory.java | 22 ++- .../manager/ServiceLoaderArchiverManager.java | 32 +++-- .../archiver/manager/UnArchiverFactory.java | 4 +- .../archivers/config/ArchiveEntryMatcher.java | 9 ++ .../archivers/config/ArchiverConfigurer.java | 12 +- .../archivers/config/CaseSensitivities.java | 2 +- .../archivers/config/CaseSensitivity.java | 8 +- .../config/DefaultArchiveResourceScan.java | 43 ++++++ .../config/DefaultArchiverConfigurer.java | 42 ++++-- .../config/DefaultDirectoryResourceScan.java | 46 ++++++ .../archivers/config/DefaultExcludes.java | 36 ----- .../config/DefaultPathPatternMatcher.java | 81 +++++++++++ ...tPlexusIoResourceCollectionConfigurer.java | 50 ++----- .../archivers/config/FileInfoMatcher.java | 8 ++ .../archivers/config/FileSelectors.java | 20 +++ .../config/FileSetResourceEmitConfigurer.java | 44 ++++++ .../plexus/archivers/config/PathMatchers.java | 15 ++ .../archivers/config/PathPatternMatcher.java | 20 +++ .../PlexusIoResourceCollectionConfigurer.java | 62 ++------ ...ourceCollectionResourceEmitConfigurer.java | 44 ++++++ .../config/ResourceEmitConfigurer.java | 17 +++ .../plexus/archivers/config/ResourceScan.java | 27 ++++ .../archivers/config/StandardExcludes.java | 16 +++ .../provider/AbstractArchiverProvider.java | 1 + ...actPlexusIoResourceCollectionProvider.java | 12 +- .../archivers/provider/ArchiverProvider.java | 1 + .../PlexusIoResourceCollectionProvider.java | 7 +- 40 files changed, 852 insertions(+), 390 deletions(-) create mode 100644 src/main/java/org/codehaus/plexus/archiver/manager/FileNames.java create mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/ArchiveEntryMatcher.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiveResourceScan.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/DefaultDirectoryResourceScan.java delete mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/DefaultPathPatternMatcher.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/FileInfoMatcher.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/FileSelectors.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/FileSetResourceEmitConfigurer.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/PathPatternMatcher.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/ResourceCollectionResourceEmitConfigurer.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/ResourceEmitConfigurer.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/ResourceScan.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/StandardExcludes.java diff --git a/pom.xml b/pom.xml index 6d7798b7d..9c36cf4e0 100644 --- a/pom.xml +++ b/pom.xml @@ -252,7 +252,7 @@ - + diff --git a/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java index b88e13179..afafa1bd8 100644 --- a/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java @@ -19,6 +19,7 @@ import java.nio.file.Path; +import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.archiver.zip.PlexusArchiverZipFileResourceCollection; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.archiver.zip.ZipUnArchiver; @@ -34,20 +35,19 @@ class CdiFactoryIT { void createsConfiguredArchivers(@TempDir Path directory) { CdiArchiverFactory factory = new CdiArchiverFactory(ZipArchiver::new); - var first = factory.configure(configurer -> configurer.setDestFile(directory.resolve("first.zip"))); - var second = factory.configure(configurer -> configurer.setDestFile(directory.resolve("second.zip"))); + var first = factory.create(directory.resolve("first.zip"), configurer -> {}); + var second = factory.create(directory.resolve("second.zip"), configurer -> {}); assertThat(first).isNotSameAs(second); assertThat(first.getDestFile()).isEqualTo(directory.resolve("first.zip").toFile()); - assertThat(second.getDestFile()) - .isEqualTo(directory.resolve("second.zip").toFile()); + assertThat(second.getDestFile()).isEqualTo(directory.resolve("second.zip").toFile()); } @Test void createsConfiguredUnarchivers(@TempDir Path directory) { CdiUnArchiverFactory factory = new CdiUnArchiverFactory(ZipUnArchiver::new); - var unarchiver = factory.configure(configurer -> configurer.setSource(directory.resolve("source.zip"))); + var unarchiver = factory.create(directory.resolve("source.zip"), c -> {}); assertThat(unarchiver.getSourceFile()) .isEqualTo(directory.resolve("source.zip").toFile()); @@ -58,10 +58,11 @@ void createsConfiguredResourceCollections(@TempDir Path directory) { CdiPlexusIoResourceCollectionFactory factory = new CdiPlexusIoResourceCollectionFactory(PlexusArchiverZipFileResourceCollection::new); + var archive = directory.resolve("source.zip"); var collection = (AbstractPlexusIoArchiveResourceCollection) - factory.configure(configurer -> configurer.setSource(directory.resolve("source.zip"))); + factory.create(archive, c -> {}); assertThat(collection.getFile()) - .isEqualTo(directory.resolve("source.zip").toFile()); + .isEqualTo(archive.toFile()); } } diff --git a/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java index 6c476af5a..9565b6625 100644 --- a/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java @@ -41,11 +41,13 @@ package org.codehaus.plexus.archiver.manager; import java.io.File; +import java.nio.file.Path; import java.util.stream.Collectors; import java.util.stream.Stream; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; @@ -187,29 +189,29 @@ void lookupResourceCollection(String resourceName) throws Exception { } @Test - void configuredLookups(@TempDir File tempDirectory) throws Exception { + void configuredLookups(@TempDir Path tempDirectory) throws Exception { ArchiverManager manager = new ServiceLoaderArchiverManager(); - File archiveFile = new File(tempDirectory, "archive.zip"); - File outputDirectory = new File(tempDirectory, "output"); + Path archiveFile = tempDirectory.resolve("archive.zip"); + Path outputDirectory = tempDirectory.resolve("output"); ArchiverFactory archiverFactory = manager.getArchiverFactory("zip"); - Archiver archiver = archiverFactory.configure(configurer -> configurer.setDestFile(archiveFile.toPath())); - Archiver secondArchiver = archiverFactory.configure(configurer -> {}); - UnArchiver unarchiver = manager.getUnArchiverFactory(archiveFile).configure(configurer -> { - configurer.setSource(archiveFile.toPath()); - configurer.setDestinationDirectory(outputDirectory.toPath()); + Archiver archiver = archiverFactory.create(archiveFile, configurer -> {}); + Archiver secondArchiver = archiverFactory.create(archiveFile, configurer -> {}); + UnArchiver unarchiver = manager.createUnArchiver(archiveFile, configurer -> { + configurer.setDestinationDirectory(outputDirectory); }); AbstractPlexusIoArchiveResourceCollection resourceCollection = (AbstractPlexusIoArchiveResourceCollection) - manager.getResourceCollectionFactory(archiveFile).configure(configurer -> { - configurer.setSource(archiveFile.toPath()); - configurer.setPrefix("content/"); - }); + manager.createResourceCollection( + archiveFile, + configurer -> { + configurer.prefix("content/"); + }); - assertThat(archiver.getDestFile()).isEqualTo(archiveFile); + assertThat(archiver.getDestFile()).isEqualTo(archiveFile.toFile()); assertThat(secondArchiver).isNotSameAs(archiver); - assertThat(unarchiver.getSourceFile()).isEqualTo(archiveFile); - assertThat(unarchiver.getDestDirectory()).isEqualTo(outputDirectory); - assertThat(resourceCollection.getFile()).isEqualTo(archiveFile); + assertThat(unarchiver.getSourceFile()).isEqualTo(archiveFile.toFile()); + assertThat(unarchiver.getDestDirectory()).isEqualTo(outputDirectory.toFile()); + assertThat(resourceCollection.getFile()).isEqualTo(archiveFile.toFile()); assertThat(resourceCollection.getPrefix()).isEqualTo("content/"); } diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index 2c620adc2..ad105d80c 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -33,11 +33,14 @@ 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.PermissionHandling; import org.codehaus.plexus.archivers.config.FilePermissions; +import org.codehaus.plexus.archivers.config.PathMatchers; +import org.codehaus.plexus.archivers.config.PathPatternMatcher; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archivers.config.StandardExcludes; import org.codehaus.plexus.archivers.provider.AbstractArchiverProvider; import org.codehaus.plexus.archivers.provider.ArchiverProvider; import org.junit.jupiter.api.Test; @@ -70,24 +73,36 @@ void doesNotExposeUnconfiguredArchiverCreation() { void configuresNewArchiverWithoutExposingFileSetImplementations(@TempDir Path directory) { CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - - Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.fromDirectory(directory) - .prefix("content/") - .includes(List.of("**/*.txt")) - .excludes(List.of("**/ignored.txt")) - .caseSensitive(CaseSensitivity.INSENSITIVE) - .defaultExcludes(DefaultExcludes.IGNORE) - .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) - .build())); + + Archiver actual = provider.newArchiver(configurer -> configurer + .resource(ResourceScan.fromDirectory(directory).matcher(PathPatternMatcher + .includes("**/*.txt") + .excludes("**/ignored.txt") + .caseSensitive(CaseSensitivity.INSENSITIVE) + .standardExcludes(StandardExcludes.NONE)), + emit -> { + emit.prefix("content/"); + emit.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); + })); + +// Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.fromDirectory(directory) +// .prefix("content/") +// .includes(List.of("**/*.txt")) +// .excludes(List.of("**/ignored.txt")) +// .caseSensitive(CaseSensitivity.INSENSITIVE) +// .defaultExcludes(DefaultExcludes.IGNORE) +// .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) +// .build())); assertThat(actual).isSameAs(expected); - assertThat(expected.fileSet.getDirectory()).isEqualTo(directory.toFile()); - assertThat(expected.fileSet.getPrefix()).isEqualTo("content/"); - assertThat(expected.fileSet.getIncludes()).containsExactly("**/*.txt"); - assertThat(expected.fileSet.getExcludes()).containsExactly("**/ignored.txt"); - assertThat(expected.fileSet.isCaseSensitive()).isFalse(); - assertThat(expected.fileSet.isUsingDefaultExcludes()).isFalse(); - assertThat(expected.fileSet.isIncludingEmptyDirectories()).isFalse(); + + assertThat(expected.fileSet.getDirectory()).as("getDirectory").isEqualTo(directory.toFile()); + assertThat(expected.fileSet.getPrefix()).as("getPrefix").isEqualTo("content/"); + assertThat(expected.fileSet.getIncludes()).as("getIncludes").containsExactly("**/*.txt"); + assertThat(expected.fileSet.getExcludes()).as("getExcludes").containsExactly("**/ignored.txt"); + assertThat(expected.fileSet.isCaseSensitive()).as("isCaseSensitive").isFalse(); + assertThat(expected.fileSet.isUsingDefaultExcludes()).as("isUsingDefaultExcludes").isFalse(); + assertThat(expected.fileSet.isIncludingEmptyDirectories()).as("isIncludingEmptyDirectories").isFalse(); } @Test @@ -96,23 +111,34 @@ void configuresArchivedFileSet(@TempDir Path directory) { CapturingArchiver expected = new CapturingArchiver(); ArchiverProvider provider = providerFor(expected); - provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.fromArchive(archive) - .prefix("lib/") - .includes(List.of("**/*.class")) - .excludes(List.of("module-info.class")) - .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) - .defaultExcludes(DefaultExcludes.IGNORE) - .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) - .build())); - - assertThat(expected.archivedFileSet.getArchive()).isEqualTo(archive.toFile()); - assertThat(expected.archivedFileSet.getPrefix()).isEqualTo("lib/"); - assertThat(expected.archivedFileSet.getIncludes()).containsExactly("**/*.class"); - assertThat(expected.archivedFileSet.getExcludes()).containsExactly("module-info.class"); - assertThat(expected.archivedFileSet.isCaseSensitive()) + Archiver actual = provider.newArchiver(configurer -> configurer + .resource(ResourceScan.fromArchive(archive).matcher(PathPatternMatcher + .includes("**/*.class") + .excludes("module-info.class") + .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) + .standardExcludes(StandardExcludes.NONE)), + emit -> { + emit.prefix("lib/"); + emit.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); + })); + +// provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.fromArchive(archive) +// .prefix("lib/") +// .includes(List.of("**/*.class")) +// .excludes(List.of("module-info.class")) +// .caseSensitive(CaseSensitivity.PLATFORM_DEFAULT) +// .defaultExcludes(DefaultExcludes.IGNORE) +// .emptyDirectories(EmptyDirectoryHandling.EXCLUDE) +// .build())); + + assertThat(expected.archivedFileSet.getArchive()).as("getArchive").isEqualTo(archive.toFile()); + assertThat(expected.archivedFileSet.getPrefix()).as("getPrefix").isEqualTo("lib/"); + assertThat(expected.archivedFileSet.getIncludes()).as("getIncludes").containsExactly("**/*.class"); + assertThat(expected.archivedFileSet.getExcludes()).as("getExcludes").containsExactly("module-info.class"); + assertThat(expected.archivedFileSet.isCaseSensitive()).as("isCaseSensitive") .isEqualTo(CaseSensitivities.resolve(CaseSensitivity.PLATFORM_DEFAULT)); - assertThat(expected.archivedFileSet.isUsingDefaultExcludes()).isFalse(); - assertThat(expected.archivedFileSet.isIncludingEmptyDirectories()).isFalse(); + assertThat(expected.archivedFileSet.isUsingDefaultExcludes()).as("isUsingDefaultExcludes").isFalse(); + assertThat(expected.archivedFileSet.isIncludingEmptyDirectories()).as("isIncludingEmptyDirectories").isFalse(); } @Test diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java index 31018f3d4..415ead751 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java @@ -29,9 +29,10 @@ 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.PathPatternMatcher; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archivers.config.StandardExcludes; import org.codehaus.plexus.archivers.config.SymbolicLinkHandling; import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; import org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider; @@ -43,77 +44,61 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import net.bytebuddy.build.ToStringPlugin.Exclude; + import static org.assertj.core.api.Assertions.assertThat; class PlexusIoResourceCollectionProviderIT { - @Test - void exposesOnlyConfiguredCreation() { - assertThat(PlexusIoResourceCollectionProvider.class.getPermittedSubclasses()) - .containsExactly(AbstractPlexusIoResourceCollectionProvider.class); - assertThat(Arrays.stream(PlexusIoResourceCollectionProvider.class.getMethods()) - .filter(method -> method.getName().equals("newPlexusIoResourceCollection")) - .map(method -> method.getParameterCount())) - .containsExactly(1); - assertThat(Arrays.stream(AbstractPlexusIoResourceCollectionProvider.class.getMethods()) - .map(method -> method.getName())) - .doesNotContain("create"); - assertThat(Arrays.stream(PlexusIoResourceCollectionConfigurer.class.getMethods()) - .filter(method -> Modifier.isStatic(method.getModifiers()))) - .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 + void exposesOnlyConfiguredCreation() { + assertThat(PlexusIoResourceCollectionProvider.class.getPermittedSubclasses()) + .containsExactly(AbstractPlexusIoResourceCollectionProvider.class); + } - @Test - void configuresArchiveResourceCollection(@TempDir Path directory) { - Path source = directory.resolve("source.zip"); + @Test + void configuresArchiveResourceCollection(@TempDir Path directory) { + Path source = directory.resolve("source.zip"); - AbstractPlexusIoResourceCollection collection = (AbstractPlexusIoResourceCollection) - new PlexusArchiverZipFileResourceCollectionProvider().newPlexusIoResourceCollection(configurer -> { - configurer.setSource(source); - configurer.setPrefix("content/"); - configurer.setIncludes(List.of("**/*.txt")); - configurer.setExcludes(List.of("**/ignored.txt")); - configurer.setCaseSensitivity(CaseSensitivity.INSENSITIVE); - configurer.setDefaultExcludes(DefaultExcludes.IGNORE); - configurer.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); - configurer.setEncoding(StandardCharsets.UTF_8); - }); + AbstractPlexusIoResourceCollection collection = (AbstractPlexusIoResourceCollection) new PlexusArchiverZipFileResourceCollectionProvider() + .create(source, configurer -> { + configurer.prefix("content/"); + configurer.matcher(PathPatternMatcher + .includes("**/*.txt") + .excludes("**/ignored.txt") + .standardExcludes(StandardExcludes.NONE) + .caseSensitive(CaseSensitivity.INSENSITIVE)); +// configurer.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); +// configurer.setEncoding(StandardCharsets.UTF_8); + }); - assertThat(((AbstractPlexusIoArchiveResourceCollection) collection).getFile()) - .isEqualTo(source.toFile()); - assertThat(collection.getPrefix()).isEqualTo("content/"); - assertThat(collection.getIncludes()).containsExactly("**/*.txt"); - assertThat(collection.getExcludes()).containsExactly("**/ignored.txt"); - assertThat(collection.isCaseSensitive()).isFalse(); - assertThat(collection.isUsingDefaultExcludes()).isFalse(); - assertThat(collection.isIncludingEmptyDirectories()).isFalse(); - } + assertThat(((AbstractPlexusIoArchiveResourceCollection) collection).getFile()).isEqualTo(source.toFile()); + assertThat(collection.getPrefix()).isEqualTo("content/"); + assertThat(collection.getIncludes()).containsExactly("**/*.txt"); + assertThat(collection.getExcludes()).containsExactly("**/ignored.txt"); + assertThat(collection.isCaseSensitive()).isFalse(); + assertThat(collection.isUsingDefaultExcludes()).isFalse(); + assertThat(collection.isIncludingEmptyDirectories()).isFalse(); + } - @Test - void configuresFilesystemResourceCollection(@TempDir Path directory) { - PlexusIoFileResourceCollection collection = (PlexusIoFileResourceCollection) - new PlexusIoFileResourceCollectionProvider().newPlexusIoResourceCollection(configurer -> { - configurer.setSource(directory); - configurer.setSymbolicLinkHandling(SymbolicLinkHandling.PRESERVE); - }); + @Test + void configuresFilesystemResourceCollection(@TempDir Path directory) { + PlexusIoFileResourceCollection collection = (PlexusIoFileResourceCollection) new PlexusIoFileResourceCollectionProvider() + .create(directory, configurer -> { + configurer.setSymbolicLinkHandling(SymbolicLinkHandling.PRESERVE); + }); - assertThat(collection.getBaseDir()).isEqualTo(directory.toFile()); - assertThat(collection.isFollowingSymLinks()).isFalse(); - } + assertThat(collection.getBaseDir()).isEqualTo(directory.toFile()); + assertThat(collection.isFollowingSymLinks()).isFalse(); + } - @Test - void configuresCompressedResourceCollectionSource(@TempDir Path directory) { - Path source = directory.resolve("source.gz"); + @Test + void configuresCompressedResourceCollectionSource(@TempDir Path directory) { + Path source = directory.resolve("source.gz"); - PlexusIoCompressedFileResourceCollection collection = - (PlexusIoCompressedFileResourceCollection) new PlexusIoGzipResourceCollectionProvider() - .newPlexusIoResourceCollection(configurer -> configurer.setSource(source)); + PlexusIoCompressedFileResourceCollection collection = (PlexusIoCompressedFileResourceCollection) new PlexusIoGzipResourceCollectionProvider() + .create(source, configurer -> {}); - assertThat(collection.getFile()).isEqualTo(source.toFile()); - } + assertThat(collection.getFile()).isEqualTo(source.toFile()); + } } diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java index 6a1f0e3f8..bd4936c6a 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/UnArchiverProviderIT.java @@ -26,11 +26,9 @@ 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.archivers.provider.AbstractUnArchiverProvider; import org.codehaus.plexus.archivers.provider.UnArchiverProvider; -import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; 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 c02706ba1..611b7e4d5 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractArchiverManager.java @@ -22,13 +22,11 @@ import java.io.File; import java.util.Collection; import java.util.Collections; -import java.util.Locale; import java.util.Map; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; -import org.codehaus.plexus.util.StringUtils; import static java.util.Objects.requireNonNull; @@ -105,13 +103,7 @@ public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(Stri @Override @Nonnull public final Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException { - return getArchiver(getFileExtension(file)); - } - - @Override - @Nonnull - public final ArchiverFactory getArchiverFactory(@Nonnull File file) throws NoSuchArchiverException { - return getArchiverFactory(getFileExtension(file)); + return getArchiver(FileNames.getFileExtension(file)); } @Override @@ -122,13 +114,7 @@ public Collection getAvailableArchivers() { @Override @Nonnull public final UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException { - return getUnArchiver(getFileExtension(file)); - } - - @Override - @Nonnull - public final UnArchiverFactory getUnArchiverFactory(@Nonnull File file) throws NoSuchArchiverException { - return getUnArchiverFactory(getFileExtension(file)); + return getUnArchiver(FileNames.getFileExtension(file)); } @Nonnull @@ -140,14 +126,7 @@ public final Collection getAvailableUnArchivers() { @Override @Nonnull public final PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException { - return getResourceCollection(getFileExtension(file)); - } - - @Override - @Nonnull - public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(@Nonnull File file) - throws NoSuchArchiverException { - return getResourceCollectionFactory(getFileExtension(file)); + return getResourceCollection(FileNames.getFileExtension(file)); } @Nonnull @@ -155,23 +134,4 @@ public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(@Non public final Collection getAvailableResourceCollections() { return plexusIoResourceCollections.keySet(); } - - @Nonnull - private static String getFileExtension(@Nonnull File file) { - - String fileName = file.getName().toLowerCase(Locale.ROOT); - String[] tokens = StringUtils.split(fileName, "."); - - String archiveExt = ""; - - if (tokens.length == 2) { - archiveExt = tokens[1]; - } else if (tokens.length > 2 && "tar".equals(tokens[tokens.length - 2])) { - archiveExt = "tar." + tokens[tokens.length - 1]; - } else if (tokens.length > 2) { - archiveExt = tokens[tokens.length - 1]; - } - - return archiveExt; - } } diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java b/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java index f49f27423..fb890880a 100644 --- a/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java +++ b/src/main/java/org/codehaus/plexus/archiver/manager/ArchiverManager.java @@ -32,24 +32,16 @@ public interface ArchiverManager { @Nonnull Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException; - /** - * Returns a factory for the named archive format. - * - * @since 5.0.0 - */ - @Nonnull - ArchiverFactory getArchiverFactory(@Nonnull String archiverName) throws NoSuchArchiverException; - @Nonnull Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException; /** - * Returns an archiver factory selected from the file extension. + * Returns an unarchiver factory selected from the file extension. * * @since 5.0.0 */ @Nonnull - ArchiverFactory getArchiverFactory(@Nonnull File file) throws NoSuchArchiverException; + ArchiverFactory getArchiverFactory(@Nonnull String archiverName) throws NoSuchArchiverException; @Nonnull Collection getAvailableArchivers(); @@ -68,28 +60,12 @@ public interface ArchiverManager { @Nonnull UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException; - /** - * Returns an unarchiver factory selected from the file extension. - * - * @since 5.0.0 - */ - @Nonnull - UnArchiverFactory getUnArchiverFactory(@Nonnull File file) throws NoSuchArchiverException; - @Nonnull Collection getAvailableUnArchivers(); @Nonnull PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException; - /** - * Returns a resource collection factory selected from the file extension. - * - * @since 5.0.0 - */ - @Nonnull - PlexusIoResourceCollectionFactory getResourceCollectionFactory(@Nonnull File file) throws NoSuchArchiverException; - @Nonnull PlexusIoResourceCollection getResourceCollection(String unArchiverName) throws NoSuchArchiverException; diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/FileNames.java b/src/main/java/org/codehaus/plexus/archiver/manager/FileNames.java new file mode 100644 index 000000000..aa700f51b --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/FileNames.java @@ -0,0 +1,42 @@ +package org.codehaus.plexus.archiver.manager; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.nio.file.Path; +import java.util.Locale; + +import org.codehaus.plexus.util.StringUtils; + +class FileNames { + + private FileNames() {} + + @Nonnull + static String getFileExtension(@Nonnull Path path) { + return getFileExtension(path.getFileName().toString()); + } + + @Nonnull + static String getFileExtension(@Nonnull File file) { + return getFileExtension(file.getName()); + } + + @Nonnull + private static String getFileExtension(@Nonnull String name) { + String fileName = name.toLowerCase(Locale.ROOT); + String[] tokens = StringUtils.split(fileName, "."); + + String archiveExt = ""; + + if (tokens.length == 2) { + archiveExt = tokens[1]; + } else if (tokens.length > 2 && "tar".equals(tokens[tokens.length - 2])) { + archiveExt = "tar." + tokens[tokens.length - 1]; + } else if (tokens.length > 2) { + archiveExt = tokens[tokens.length - 1]; + } + + return archiveExt; + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java index 4009174c6..c04615792 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java +++ b/src/main/java17/org/codehaus/plexus/archiver/ArchivedFileSet.java @@ -6,14 +6,15 @@ import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; import org.codehaus.plexus.archivers.config.CaseSensitivities; import org.codehaus.plexus.archivers.config.CaseSensitivity; -import org.codehaus.plexus.archivers.config.DefaultExcludes; import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.StandardExcludes; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; import org.codehaus.plexus.components.io.functions.InputStreamTransformer; import java.io.File; import java.nio.file.Path; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Objects; @@ -47,12 +48,13 @@ public static Builder fromArchive(Path archive) { * @since 5.0.0 */ static final class Builder { + private final Path archive; private String prefix; private Collection includes; private Collection excludes; private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; - private DefaultExcludes defaultExcludes = DefaultExcludes.USE; + private Collection standardExcludes = List.of(); private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; private Collection fileSelectors; private InputStreamTransformer streamTransformer; @@ -82,8 +84,13 @@ public Builder caseSensitive(CaseSensitivity caseSensitivity) { return this; } - public Builder defaultExcludes(DefaultExcludes defaultExcludes) { - this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); + public Builder standardExcludes(StandardExcludes.ExcludeMode mode) { + this.standardExcludes = List.of(mode); + return this; + } + + public Builder standardExcludes(StandardExcludes.ExcludeGroup... groups) { + this.standardExcludes = Arrays.asList(groups); return this; } @@ -113,13 +120,18 @@ public ArchivedFileSet build() { fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); fileSet.setCaseSensitive(isCaseSensitive()); - fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); if (streamTransformer != null) { fileSet.setStreamTransformer(streamTransformer); } fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); + + if (standardExcludes.contains(StandardExcludes.NONE)) { + fileSet.usingDefaultExcludes(false); + } else if (standardExcludes.contains(StandardExcludes.PLEXUS)) { + fileSet.usingDefaultExcludes(true); + } return fileSet; } @@ -127,10 +139,6 @@ private boolean isCaseSensitive() { return CaseSensitivities.resolve(caseSensitivity); } - private boolean usesBuiltInDefaultExcludes() { - return defaultExcludes == DefaultExcludes.USE; - } - private boolean includesEmptyDirectories() { return emptyDirectoryHandling == EmptyDirectoryHandling.INCLUDE; } diff --git a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java index 4dc6cf773..8a217298f 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/FileSet.java +++ b/src/main/java17/org/codehaus/plexus/archiver/FileSet.java @@ -3,15 +3,17 @@ import java.io.File; import java.nio.file.Path; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Objects; +import org.codehaus.plexus.archiver.ArchivedFileSet.Builder; import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.archivers.config.CaseSensitivities; import org.codehaus.plexus.archivers.config.CaseSensitivity; -import org.codehaus.plexus.archivers.config.DefaultExcludes; import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; +import org.codehaus.plexus.archivers.config.StandardExcludes; import org.codehaus.plexus.archivers.config.SymbolicLinkHandling; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; @@ -65,7 +67,7 @@ static final class Builder { private Collection includes; private Collection excludes; private CaseSensitivity caseSensitivity = CaseSensitivity.SENSITIVE; - private DefaultExcludes defaultExcludes = DefaultExcludes.USE; + private Collection standardExcludes = List.of(); private EmptyDirectoryHandling emptyDirectoryHandling = EmptyDirectoryHandling.INCLUDE; private SymbolicLinkHandling symbolicLinkHandling = SymbolicLinkHandling.PRESERVE; private Collection fileSelectors; @@ -96,8 +98,13 @@ public Builder caseSensitive(CaseSensitivity caseSensitivity) { return this; } - public Builder defaultExcludes(DefaultExcludes defaultExcludes) { - this.defaultExcludes = Objects.requireNonNull(defaultExcludes, "defaultExcludes"); + public Builder standardExcludes(StandardExcludes.ExcludeMode mode) { + this.standardExcludes = List.of(mode); + return this; + } + + public Builder standardExcludes(StandardExcludes.ExcludeGroup... groups) { + this.standardExcludes = Arrays.asList(groups); return this; } @@ -132,7 +139,6 @@ public FileSet build() { fileSet.setIncludes(includes == null ? null : includes.toArray(String[]::new)); fileSet.setExcludes(excludes == null ? null : excludes.toArray(String[]::new)); fileSet.setCaseSensitive(isCaseSensitive()); - fileSet.setUsingDefaultExcludes(usesBuiltInDefaultExcludes()); fileSet.setIncludingEmptyDirectories(includesEmptyDirectories()); fileSet.setFollowingSymLinks(followsSymbolicLinks()); fileSet.setFileSelectors(fileSelectors == null ? null : fileSelectors.toArray(FileSelector[]::new)); @@ -140,6 +146,11 @@ public FileSet build() { fileSet.setStreamTransformer(streamTransformer); } fileSet.setFileMappers(fileMappers == null ? null : fileMappers.toArray(FileMapper[]::new)); + if (standardExcludes.contains(StandardExcludes.NONE)) { + fileSet.usingDefaultExcludes(false); + } else if (standardExcludes.contains(StandardExcludes.PLEXUS)) { + fileSet.usingDefaultExcludes(true); + } return fileSet; } @@ -147,10 +158,6 @@ private boolean isCaseSensitive() { return CaseSensitivities.resolve(caseSensitivity); } - private boolean usesBuiltInDefaultExcludes() { - return defaultExcludes == DefaultExcludes.USE; - } - private boolean followsSymbolicLinks() { return symbolicLinkHandling == SymbolicLinkHandling.FOLLOW; } diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java index 7e671425e..335d309ad 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverFactory.java @@ -17,6 +17,7 @@ package org.codehaus.plexus.archiver.manager; +import java.nio.file.Path; import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; @@ -65,8 +66,9 @@ public interface ArchiverFactory { * @throws UnsupportedOperationException if mutation methods are called * @since 5.0.0 */ - default Archiver configure(Consumer configurer) { + default Archiver create(Path path, Consumer configurer) { Archiver archiver = create(); + archiver.setDestFile(path.toFile()); configurer.accept(ArchiverConfigurer.of(archiver)); return archiver; } diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java new file mode 100644 index 000000000..26a136baa --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java @@ -0,0 +1,134 @@ +/* + * Copyright 2001,2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.codehaus.plexus.archiver.manager; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Objects; +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer; +import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +/** + * @author dantran + */ +public interface ArchiverManager { + @Nonnull + Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException; + + /** + * Returns a factory for the named archive format. + * + * @since 5.0.0 + */ + @Nonnull + ArchiverFactory getArchiverFactory(@Nonnull String archiverName) throws NoSuchArchiverException; + + @Nonnull + Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableArchivers(); + + @Nonnull + UnArchiver getUnArchiver(@Nonnull String unArchiverName) throws NoSuchArchiverException; + + /** + * Returns a factory for the named archive extraction format. + * + * @since 5.0.0 + */ + @Nonnull + UnArchiverFactory getUnArchiverFactory(@Nonnull String unArchiverName) throws NoSuchArchiverException; + + @Nonnull + UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableUnArchivers(); + + @Nonnull + PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException; + + @Nonnull + PlexusIoResourceCollection getResourceCollection(String unArchiverName) throws NoSuchArchiverException; + + /** + * Returns a resource collection factory for the named format. + * + * @since 5.0.0 + */ + @Nonnull + PlexusIoResourceCollectionFactory getResourceCollectionFactory(String resourceCollectionName) + throws NoSuchArchiverException; + + @Nonnull + Collection getAvailableResourceCollections(); + + // + // Methods below are default methods added on top of original interface + // + + /** + * Returns an archiver factory selected from the file extension. + * + * @since 5.0.0 + */ + @Nonnull + default Archiver createArchiver(@Nonnull Path destFile, Consumer configurer) throws NoSuchArchiverException { + Objects.requireNonNull(destFile, "destFile"); + Objects.requireNonNull(configurer, "configurer"); + + String format = FileNames.getFileExtension(destFile); + + return getArchiverFactory(format).create(destFile, configurer); + } + + /** + * Returns an unarchiver factory selected from the file extension. + * + * @since 5.0.0 + */ + @Nonnull + default UnArchiver createUnArchiver(@Nonnull Path srcFile, Consumer configurer) throws NoSuchArchiverException { + Objects.requireNonNull(srcFile, "srcFile"); + Objects.requireNonNull(configurer, "configurer"); + + String format = FileNames.getFileExtension(srcFile); + + return getUnArchiverFactory(format).create(srcFile, configurer); + } + + default PlexusIoResourceCollection createResourceCollection(@Nonnull Path srcFile, Consumer configurer) throws NoSuchArchiverException { + Objects.requireNonNull(srcFile, "srcFile"); + Objects.requireNonNull(configurer, "configurer"); + + String format = FileNames.getFileExtension(srcFile); + + return getResourceCollectionFactory(format).create(srcFile, configurer); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java index aede1f1d6..35d3cd58f 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java @@ -17,9 +17,12 @@ package org.codehaus.plexus.archiver.manager; +import java.nio.file.Path; +import java.util.Objects; import java.util.function.Consumer; import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.components.io.resources.PlexusIoArchivedResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -31,9 +34,20 @@ public interface PlexusIoResourceCollectionFactory { PlexusIoResourceCollection create(); - default PlexusIoResourceCollection configure(Consumer configurer) { - PlexusIoResourceCollection resourceCollection = create(); - configurer.accept(PlexusIoResourceCollectionConfigurer.of(resourceCollection)); - return resourceCollection; + default PlexusIoResourceCollection create( + Path path, + Consumer configurer) { + + Objects.requireNonNull(path, "scan"); + Objects.requireNonNull(configurer, "configurer"); + + PlexusIoResourceCollection collection = create(); + if(collection instanceof PlexusIoArchivedResourceCollection coll) { + coll.setFile(path.toFile()); + } + + configurer.accept(PlexusIoResourceCollectionConfigurer.of(collection)); + + return collection; } } diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java index 563e9fc58..abd5e0227 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -17,6 +17,7 @@ package org.codehaus.plexus.archiver.manager; +import java.nio.file.Path; import java.util.Map; import java.util.ServiceLoader; import java.util.function.Consumer; @@ -26,11 +27,14 @@ import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archivers.config.ArchiverConfigurer; import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; +import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; import org.codehaus.plexus.archivers.provider.ArchiverProvider; import org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider; import org.codehaus.plexus.archivers.provider.UnArchiverProvider; +import org.codehaus.plexus.components.io.resources.PlexusIoArchivedResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; class ServiceLoaderArchiverManager extends AbstractArchiverManager { @@ -67,7 +71,7 @@ private static Map plexusIoResourceCo return StreamSupport.stream(serviceLoader.spliterator(),false) .collect(Collectors.toMap( PlexusIoResourceCollectionProvider::getName, - ServiceLoaderArchiverManager::toPlexusIoResourceCollectionFactory)); + provider -> provider)); } @@ -76,11 +80,14 @@ private static ArchiverFactory toArchiverFactory(ArchiverProvider provider) { @Override public Archiver create() { - return create(c -> {}); + return provider.newArchiver(c -> {}); } - public Archiver create(Consumer configurer) { - return provider.newArchiver(configurer); + @Override + public Archiver create(Path path, Consumer configurer) { + Archiver archiver = provider.newArchiver(configurer); + archiver.setDestFile(path.toFile()); + return archiver; } }; } @@ -90,11 +97,14 @@ private static UnArchiverFactory toUnArchiverFactory(UnArchiverProvider provider @Override public UnArchiver create() { - return create(c -> {}); + return provider.newUnArchiver(c -> {}); } - public UnArchiver create(Consumer configurer) { - return provider.newUnArchiver(configurer); + @Override + public UnArchiver create(Path path, Consumer configurer) { + UnArchiver unarchiver = provider.newUnArchiver(configurer); + unarchiver.setSourceFile(path.toFile()); + return unarchiver; } }; } @@ -104,11 +114,13 @@ private static PlexusIoResourceCollectionFactory toPlexusIoResourceCollectionFac @Override public PlexusIoResourceCollection create() { - return create(c -> {}); + return provider.create(); } - public PlexusIoResourceCollection create(Consumer configurer) { - return provider.newPlexusIoResourceCollection(configurer); + @Override + public PlexusIoResourceCollection create(Path path, + Consumer configurer) { + return provider.create(path, 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 index 4a58ca104..a6389fe53 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/UnArchiverFactory.java @@ -17,6 +17,7 @@ package org.codehaus.plexus.archiver.manager; +import java.nio.file.Path; import java.util.function.Consumer; import org.codehaus.plexus.archiver.UnArchiver; @@ -31,8 +32,9 @@ public interface UnArchiverFactory { UnArchiver create(); - default UnArchiver configure(Consumer configurer) { + default UnArchiver create(Path path, Consumer configurer) { UnArchiver unArchiver = create(); + unArchiver.setSourceFile(path.toFile()); configurer.accept(UnArchiverConfigurer.of(unArchiver)); return unArchiver; } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveEntryMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveEntryMatcher.java new file mode 100644 index 000000000..65fbf5b89 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiveEntryMatcher.java @@ -0,0 +1,9 @@ +package org.codehaus.plexus.archivers.config; + +import org.apache.commons.compress.archivers.ArchiveEntry; + +@FunctionalInterface +public interface ArchiveEntryMatcher { + + boolean matches(ArchiveEntry archiveEntry); +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index 23e6a48ae..14360663a 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -22,25 +22,23 @@ import java.util.Comparator; import java.util.function.Consumer; -import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.Archiver; -import org.codehaus.plexus.archiver.FileSet; /** * Configures content on an archiver without exposing its file set implementations. * * @since 5.0.0 */ -public interface ArchiverConfigurer { +public sealed interface ArchiverConfigurer permits DefaultArchiverConfigurer { static ArchiverConfigurer of(Archiver archiver) { return new DefaultArchiverConfigurer(archiver); } - void addFileSet(FileSet fileSet); - - void addArchivedFileSet(ArchivedFileSet archivedFileSet); - + ArchiverConfigurer resource( + ResourceScan scan, + Consumer emit); + void setDestFile(Path destFile); /** diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java index fcc81bf5a..49319e880 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivities.java @@ -32,7 +32,7 @@ private CaseSensitivities() {} public static boolean resolve(CaseSensitivity caseSensitivity) { Objects.requireNonNull(caseSensitivity, "caseSensitivity"); if (caseSensitivity instanceof FixedCaseSensitivity cs) { - return cs.caseSensitive; + return cs.caseSensitive(); } String osName = System.getProperty("os.name", "").toLowerCase(Locale.ROOT); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java index 954b5a500..0b03f3751 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/CaseSensitivity.java @@ -33,12 +33,6 @@ public sealed interface CaseSensitivity permits FixedCaseSensitivity, PlatformDe CaseSensitivity PLATFORM_DEFAULT = new PlatformDefaultCaseSensitivity(); } -final class FixedCaseSensitivity implements CaseSensitivity { - final boolean caseSensitive; - - FixedCaseSensitivity(boolean caseSensitive) { - this.caseSensitive = caseSensitive; - } -} +final record FixedCaseSensitivity(boolean caseSensitive) implements CaseSensitivity {} final class PlatformDefaultCaseSensitivity implements CaseSensitivity {} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiveResourceScan.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiveResourceScan.java new file mode 100644 index 000000000..69c70227a --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiveResourceScan.java @@ -0,0 +1,43 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; + +final class DefaultArchiveResourceScan implements ResourceScan.ArchiveScan { + + private final Path archive; + private ArchiveEntryMatcher matcher; + + DefaultArchiveResourceScan(Path archive) { + this.archive = Objects.requireNonNull(archive, "archive"); + } + + @Override + public DefaultArchiveResourceScan matcher(ArchiveEntryMatcher matcher) { + this.matcher = Objects.requireNonNull(matcher, "matcher"); + return this; + } + + @Override + public Path archive() { + return archive; + } + + ArchiveEntryMatcher matcher() { + return matcher; + } + + DefaultArchivedFileSet toArchivedFileSet() { + DefaultArchivedFileSet fileSet = new DefaultArchivedFileSet(archive.toFile()); + + if (matcher instanceof DefaultPathPatternMatcher resourceMatcher) { + resourceMatcher.applyTo(fileSet); + } else { + throw new UnsupportedOperationException(); + } + + return fileSet; + } +} \ No newline at end of file diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java index d79a920e4..76f918ed6 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -26,7 +26,12 @@ import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.BaseFileSet; import org.codehaus.plexus.archiver.FileSet; +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; +import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; /** * Applies the configuration to the applied archiver @@ -39,18 +44,36 @@ final class DefaultArchiverConfigurer implements ArchiverConfigurer { DefaultArchiverConfigurer(Archiver archiver) { this.archiver = Objects.requireNonNull(archiver, "archiver"); } - + @Override - public void addFileSet(FileSet fileSet) { - archiver.addFileSet(Objects.requireNonNull(fileSet, "fileSet")); - } + public ArchiverConfigurer resource( + ResourceScan scan, + Consumer emit) { - @Override - public void addArchivedFileSet(ArchivedFileSet fileSet) { - archiver.addArchivedFileSet(Objects.requireNonNull(fileSet, "fileSet")); - } + if (scan instanceof DefaultDirectoryResourceScan directoryScan) { + DefaultFileSet fileSet = directoryScan.toFileSet(); - @Override + emit.accept(new FileSetResourceEmitConfigurer(fileSet)); + archiver.addFileSet(fileSet); + + return this; + } + + if (scan instanceof DefaultArchiveResourceScan archiveScan) { + DefaultArchivedFileSet fileSet = archiveScan.toArchivedFileSet(); + + emit.accept(new FileSetResourceEmitConfigurer(fileSet)); + archiver.addArchivedFileSet(fileSet); + + return this; + } + + throw new IncompatibleClassChangeError( + "Unsupported ResourceScan implementation: " + + scan.getClass().getName()); + } + + @Override public void setDestFile(Path destFile) { archiver.setDestFile(Objects.requireNonNull(destFile, "destFile").toFile()); } @@ -182,5 +205,4 @@ private static int toMode(FilePermissions filePermissions) { throw new IncompatibleClassChangeError(); } } - } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultDirectoryResourceScan.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultDirectoryResourceScan.java new file mode 100644 index 000000000..a83e0bb75 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultDirectoryResourceScan.java @@ -0,0 +1,46 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.DefaultFileSet; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; + +final class DefaultDirectoryResourceScan implements ResourceScan.DirectoryScan { + + private final Path directory; + private PathMatcher matcher; + + DefaultDirectoryResourceScan(Path directory) { + this.directory = Objects.requireNonNull(directory, "directory"); + } + + @Override + public DefaultDirectoryResourceScan matcher(PathMatcher matcher) { + this.matcher = Objects.requireNonNull(matcher, "matcher"); + return this; + } + + @Override + public Path directory() { + return directory; + } + + PathMatcher matcher() { + return matcher; + } + + DefaultFileSet toFileSet() { + DefaultFileSet fileSet = new DefaultFileSet(directory.toFile()); + + if (matcher instanceof DefaultPathPatternMatcher resourceMatcher) { + resourceMatcher.applyTo(fileSet); + } else { + fileSet.setFileSelectors(new FileSelector[] { FileSelectors.from(directory, matcher) }); + } + + return fileSet; + } + +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java deleted file mode 100644 index 525128cf2..000000000 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultExcludes.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.config; - -/** - * Controls whether standard version-control and temporary files are excluded. - * - * @since 5.0.0 - */ -public sealed interface DefaultExcludes permits BuiltInDefaultExcludes { - DefaultExcludes USE = new BuiltInDefaultExcludes(true); - DefaultExcludes IGNORE = new BuiltInDefaultExcludes(false); -} - -final class BuiltInDefaultExcludes implements DefaultExcludes { - final boolean use; - - BuiltInDefaultExcludes(boolean use) { - this.use = use; - } -} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPathPatternMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPathPatternMatcher.java new file mode 100644 index 000000000..421529f28 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPathPatternMatcher.java @@ -0,0 +1,81 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.archivers.config.StandardExcludes; +import org.codehaus.plexus.components.io.fileselectors.FileSelector; + +class DefaultPathPatternMatcher implements PathPatternMatcher { + + private final String[] includes; + private String[] excludes = new String[0]; + private Collection standardExcludes = List.of(); + private CaseSensitivity caseSensitivity; + private FileSelector[] fileSelectors = new FileSelector[0]; + + + private DefaultPathPatternMatcher(String[] includes) { + this.includes = includes.clone(); + } + + static DefaultPathPatternMatcher includes(String... includes) { + return new DefaultPathPatternMatcher(includes); + } + + @Override + public DefaultPathPatternMatcher excludes(String... excludes) { + this.excludes = excludes.clone(); + return this; + } + + @Override + public PathPatternMatcher caseSensitive(CaseSensitivity caseSensitivity) { + this.caseSensitivity = caseSensitivity; + return this; + } + + @Override + public PathPatternMatcher standardExcludes(StandardExcludes.ExcludeMode mode) { + this.standardExcludes = List.of(mode); + return this; + } + + @Override + public PathPatternMatcher standardExcludes(StandardExcludes.ExcludeGroup... groups) { + this.standardExcludes = Arrays.asList(groups); + return this; + } + + DefaultPathPatternMatcher selectedBy(FileSelector... fileSelectors) { + this.fileSelectors = fileSelectors.clone(); + return this; + } + + @Override + public boolean matches(Path path) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean matches(ArchiveEntry archiveEntry) { + throw new UnsupportedOperationException(); + } + + void applyTo(AbstractFileSet fileSet) { + fileSet.setIncludes(includes.clone()); + fileSet.setExcludes(excludes.clone()); + fileSet.setCaseSensitive(CaseSensitivities.resolve(caseSensitivity)); + fileSet.setFileSelectors(fileSelectors.clone()); + + if (standardExcludes.contains(StandardExcludes.NONE)) { + fileSet.usingDefaultExcludes(false); + } else if (standardExcludes.contains(StandardExcludes.PLEXUS)) { + fileSet.usingDefaultExcludes(true); + } + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java index b386b7a4b..ab4ffb210 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java @@ -19,9 +19,13 @@ import java.nio.charset.Charset; import java.nio.file.Path; +import java.util.Collection; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; +import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; +import org.codehaus.plexus.archiver.util.DefaultFileSet; import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; import org.codehaus.plexus.components.io.functions.InputStreamTransformer; @@ -45,69 +49,41 @@ final class DefaultPlexusIoResourceCollectionConfigurer implements PlexusIoResou } @Override - public void setSource(Path source) { - Objects.requireNonNull(source, "source"); - if (collection instanceof AbstractPlexusIoArchiveResourceCollection archiveCollection) { - archiveCollection.setFile(source.toFile()); - } else if (collection instanceof PlexusIoCompressedFileResourceCollection compressedCollection) { - compressedCollection.setFile(source.toFile()); - } else if (collection instanceof PlexusIoFileResourceCollection fileCollection) { - fileCollection.setBaseDir(source.toFile()); - } else { - throw unsupported("source paths"); - } + public void matcher(PathPatternMatcher matcher) { + // TODO Auto-generated method stub + } - + @Override - public void setPrefix(String prefix) { + public void prefix(String prefix) { configurableCollection().setPrefix(Objects.requireNonNull(prefix, "prefix")); } - @Override - public void setIncludes(List includes) { - configurableCollection().setIncludes(List.copyOf(includes).toArray(String[]::new)); - } - - @Override - public void setExcludes(List excludes) { - configurableCollection().setExcludes(List.copyOf(excludes).toArray(String[]::new)); - } - - @Override public void setFileSelectors(List fileSelectors) { configurableCollection().setFileSelectors(List.copyOf(fileSelectors).toArray(FileSelector[]::new)); } - @Override - public void setFileMappers(List fileMappers) { +// @Override + public void setFileMappers(Collection fileMappers) { configurableCollection().setFileMappers(List.copyOf(fileMappers).toArray(FileMapper[]::new)); } - @Override +// @Override public void setStreamTransformer(InputStreamTransformer streamTransformer) { configurableCollection().setStreamTransformer(Objects.requireNonNull(streamTransformer, "streamTransformer")); } - @Override public void setCaseSensitivity(CaseSensitivity caseSensitivity) { configurableCollection().setCaseSensitive(CaseSensitivities.resolve(caseSensitivity)); } - @Override - public void setDefaultExcludes(DefaultExcludes defaultExcludes) { - configurableCollection() - .setUsingDefaultExcludes( - Objects.requireNonNull(defaultExcludes, "defaultExcludes") == DefaultExcludes.USE); - } - - @Override +// @Override public void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling) { configurableCollection() .setIncludingEmptyDirectories(Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling") == EmptyDirectoryHandling.INCLUDE); } - @Override public void setEncoding(Charset charset) { if (!(collection instanceof EncodingSupported encodingSupported)) { throw unsupported("filename encoding"); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileInfoMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileInfoMatcher.java new file mode 100644 index 000000000..59eaa28da --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileInfoMatcher.java @@ -0,0 +1,8 @@ +package org.codehaus.plexus.archivers.config; + +import org.codehaus.plexus.components.io.fileselectors.FileInfo; + +public interface FileInfoMatcher { + + boolean matches(FileInfo fileInfo); +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileSelectors.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileSelectors.java new file mode 100644 index 000000000..261911edb --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileSelectors.java @@ -0,0 +1,20 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; + +import org.codehaus.plexus.components.io.fileselectors.FileSelector; + +final class FileSelectors { + + private FileSelectors() { + } + + static FileSelector from( + Path directory, + PathMatcher matcher) { + + return fileInfo -> matcher.matches( + Path.of(fileInfo.getName())); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileSetResourceEmitConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetResourceEmitConfigurer.java new file mode 100644 index 000000000..ac21fe544 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileSetResourceEmitConfigurer.java @@ -0,0 +1,44 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +final class FileSetResourceEmitConfigurer implements ResourceEmitConfigurer { + + private final AbstractFileSet fileSet; + + public FileSetResourceEmitConfigurer(AbstractFileSet fileSet) { + this.fileSet = fileSet; + } + + @Override + public void prefix(String prefix) { + fileSet.setPrefix(prefix); + } + + @Override + public void setEmptyDirectoryHandling(EmptyDirectoryHandling handling) { + fileSet.setIncludingEmptyDirectories( + Objects.requireNonNull(handling, "handling") + == EmptyDirectoryHandling.INCLUDE); + } + + @Override + public void setFileMappers(Collection fileMappers) { + List mappers = List.copyOf( + Objects.requireNonNull(fileMappers, "fileMappers")); + + fileSet.setFileMappers(mappers.toArray(FileMapper[]::new)); + } + + @Override + public void setStreamTransformer(InputStreamTransformer transformer) { + fileSet.setStreamTransformer( + Objects.requireNonNull(transformer, "transformer")); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java b/src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java new file mode 100644 index 000000000..b47e70713 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java @@ -0,0 +1,15 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.PathMatcher; +import java.util.Collection; + +public final class PathMatchers { + + private PathMatchers() { + + } + + public static PathMatcher antPatterns(Collection includes, Collection excludes) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/PathPatternMatcher.java b/src/main/java17/org/codehaus/plexus/archivers/config/PathPatternMatcher.java new file mode 100644 index 000000000..426850b98 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PathPatternMatcher.java @@ -0,0 +1,20 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.PathMatcher; + +public interface PathPatternMatcher extends PathMatcher, ArchiveEntryMatcher { + + static PathPatternMatcher includes(String... includes) { + return DefaultPathPatternMatcher.includes(includes); + } + + PathPatternMatcher excludes(String... excludes); + + PathPatternMatcher standardExcludes(StandardExcludes.ExcludeMode mode); + + PathPatternMatcher standardExcludes(StandardExcludes.ExcludeGroup... groups); + + PathPatternMatcher caseSensitive(CaseSensitivity caseSensitivity); + + +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java index 4fd31bfe0..c37a3ed23 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java @@ -1,63 +1,17 @@ -/* - * 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.charset.Charset; -import java.nio.file.Path; -import java.util.List; - -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. - * - * @since 5.0.0 - */ public interface PlexusIoResourceCollectionConfigurer { - - static PlexusIoResourceCollectionConfigurer of(PlexusIoResourceCollection resourceCollection) { - return new DefaultPlexusIoResourceCollectionConfigurer(resourceCollection); - - } - void setSource(Path source); - - void setPrefix(String prefix); - - void setIncludes(List includes); - - void setExcludes(List excludes); - - void setFileSelectors(List fileSelectors); - void setFileMappers(List fileMappers); - - void setStreamTransformer(InputStreamTransformer streamTransformer); - - void setCaseSensitivity(CaseSensitivity caseSensitivity); - - void setDefaultExcludes(DefaultExcludes defaultExcludes); - - void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling); + public static PlexusIoResourceCollectionConfigurer of(PlexusIoResourceCollection collection) { + return new DefaultPlexusIoResourceCollectionConfigurer(collection); + } + + void matcher(PathPatternMatcher matcher); - void setEncoding(Charset charset); + void prefix(String prefix); + + void setSymbolicLinkHandling(SymbolicLinkHandling handling); - void setSymbolicLinkHandling(SymbolicLinkHandling symbolicLinkHandling); } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ResourceCollectionResourceEmitConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceCollectionResourceEmitConfigurer.java new file mode 100644 index 000000000..b7b0953e1 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceCollectionResourceEmitConfigurer.java @@ -0,0 +1,44 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +import org.codehaus.plexus.archiver.util.AbstractFileSet; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +final class ResourceCollectionResourceEmitConfigurer implements ResourceEmitConfigurer { + + private final AbstractFileSet fileSet; + + public ResourceCollectionResourceEmitConfigurer(AbstractFileSet fileSet) { + this.fileSet = fileSet; + } + + @Override + public void prefix(String prefix) { + fileSet.setPrefix(prefix); + } + + @Override + public void setEmptyDirectoryHandling(EmptyDirectoryHandling handling) { + fileSet.setIncludingEmptyDirectories( + Objects.requireNonNull(handling, "handling") + == EmptyDirectoryHandling.INCLUDE); + } + + @Override + public void setFileMappers(Collection fileMappers) { + List mappers = List.copyOf( + Objects.requireNonNull(fileMappers, "fileMappers")); + + fileSet.setFileMappers(mappers.toArray(FileMapper[]::new)); + } + + @Override + public void setStreamTransformer(InputStreamTransformer transformer) { + fileSet.setStreamTransformer( + Objects.requireNonNull(transformer, "transformer")); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ResourceEmitConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceEmitConfigurer.java new file mode 100644 index 000000000..349ba7d67 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceEmitConfigurer.java @@ -0,0 +1,17 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Collection; + +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.functions.InputStreamTransformer; + +public interface ResourceEmitConfigurer { + + void prefix(String prefix); + + void setEmptyDirectoryHandling(EmptyDirectoryHandling handling); + + void setFileMappers(Collection fileMappers); + + void setStreamTransformer(InputStreamTransformer transformer); +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ResourceScan.java b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceScan.java new file mode 100644 index 000000000..894e177ee --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ResourceScan.java @@ -0,0 +1,27 @@ +package org.codehaus.plexus.archivers.config; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; + +public sealed interface ResourceScan { + + static DirectoryScan fromDirectory(Path directory) { + return new DefaultDirectoryResourceScan(directory); + } + + static ArchiveScan fromArchive(Path archive) { + return new DefaultArchiveResourceScan(archive); + } + + sealed interface DirectoryScan extends ResourceScan permits DefaultDirectoryResourceScan { + Path directory(); + + DirectoryScan matcher(PathMatcher matcher); + } + + sealed interface ArchiveScan extends ResourceScan permits DefaultArchiveResourceScan { + Path archive(); + + ArchiveScan matcher(ArchiveEntryMatcher matcher); + } +} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/StandardExcludes.java b/src/main/java17/org/codehaus/plexus/archivers/config/StandardExcludes.java new file mode 100644 index 000000000..9aeff08f3 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/StandardExcludes.java @@ -0,0 +1,16 @@ +package org.codehaus.plexus.archivers.config; + +public sealed interface StandardExcludes { + + // org.codehaus.plexus.util.AbstractScanner.DEFAULTEXCLUDES + ExcludeGroup PLEXUS = new PredefinedExcludes("plexus-utils"); + + ExcludeMode NONE = new NamedExcludeMode("none"); + + sealed interface ExcludeMode extends StandardExcludes permits NamedExcludeMode {} + + sealed interface ExcludeGroup extends StandardExcludes permits PredefinedExcludes {} +} +record PredefinedExcludes(String name) implements StandardExcludes.ExcludeGroup {} + +record NamedExcludeMode(String name) implements StandardExcludes.ExcludeMode {} \ No newline at end of file diff --git a/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java index 3bf717edb..492d1f342 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractArchiverProvider.java @@ -17,6 +17,7 @@ package org.codehaus.plexus.archivers.provider; +import java.nio.file.Path; import java.util.Objects; import java.util.function.Consumer; diff --git a/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java index 72a387c9b..c119a863b 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/AbstractPlexusIoResourceCollectionProvider.java @@ -17,10 +17,6 @@ package org.codehaus.plexus.archivers.provider; -import java.util.Objects; -import java.util.function.Consumer; - -import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -34,11 +30,7 @@ public abstract non-sealed class AbstractPlexusIoResourceCollectionProvider protected abstract PlexusIoResourceCollection createResourceCollection(); @Override - public final PlexusIoResourceCollection newPlexusIoResourceCollection( - Consumer configurer) { - PlexusIoResourceCollection collection = createResourceCollection(); - Objects.requireNonNull(configurer, "configurer") - .accept(PlexusIoResourceCollectionConfigurer.of(collection)); - return collection; + public final PlexusIoResourceCollection create() { + return createResourceCollection(); } } diff --git a/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java index 3453c2bed..6a3b1f3b1 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/ArchiverProvider.java @@ -17,6 +17,7 @@ package org.codehaus.plexus.archivers.provider; +import java.nio.file.Path; import java.util.function.Consumer; import org.codehaus.plexus.archiver.Archiver; diff --git a/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java b/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java index ec82df4a6..13cccedc2 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java +++ b/src/main/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProvider.java @@ -19,7 +19,9 @@ import java.util.function.Consumer; -import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; +import org.codehaus.plexus.archivers.config.ResourceScan; +import org.codehaus.plexus.archiver.manager.PlexusIoResourceCollectionFactory; +import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; /** @@ -27,9 +29,8 @@ * * @since 5.0.0 */ -public sealed interface PlexusIoResourceCollectionProvider permits AbstractPlexusIoResourceCollectionProvider { +public sealed interface PlexusIoResourceCollectionProvider extends PlexusIoResourceCollectionFactory permits AbstractPlexusIoResourceCollectionProvider { String getName(); - PlexusIoResourceCollection newPlexusIoResourceCollection(Consumer configurer); } From 1793854b8abd63210d552802a2a3dcf162632610 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Fri, 2 Oct 2026 11:12:23 +0200 Subject: [PATCH 17/20] remove creation of configurable plexusresource --- .../plexus/archiver/manager/CdiFactoryIT.java | 14 --- .../ServiceLoaderArchiverManagerIT.java | 8 -- .../PlexusIoResourceCollectionProviderIT.java | 104 ---------------- .../archiver/manager/ArchiverManager.java | 10 -- .../PlexusIoResourceCollectionFactory.java | 53 -------- .../manager/ServiceLoaderArchiverManager.java | 7 -- ...tPlexusIoResourceCollectionConfigurer.java | 113 ------------------ .../PlexusIoResourceCollectionConfigurer.java | 17 --- 8 files changed, 326 deletions(-) delete mode 100644 src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java delete mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java delete mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java delete mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java diff --git a/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java index afafa1bd8..5f4a6229b 100644 --- a/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/CdiFactoryIT.java @@ -23,7 +23,6 @@ import org.codehaus.plexus.archiver.zip.PlexusArchiverZipFileResourceCollection; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.archiver.zip.ZipUnArchiver; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -52,17 +51,4 @@ void createsConfiguredUnarchivers(@TempDir Path directory) { assertThat(unarchiver.getSourceFile()) .isEqualTo(directory.resolve("source.zip").toFile()); } - - @Test - void createsConfiguredResourceCollections(@TempDir Path directory) { - CdiPlexusIoResourceCollectionFactory factory = - new CdiPlexusIoResourceCollectionFactory(PlexusArchiverZipFileResourceCollection::new); - - var archive = directory.resolve("source.zip"); - var collection = (AbstractPlexusIoArchiveResourceCollection) - factory.create(archive, c -> {}); - - assertThat(collection.getFile()) - .isEqualTo(archive.toFile()); - } } diff --git a/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java index 9565b6625..73f243bc9 100644 --- a/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java +++ b/src/it/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManagerIT.java @@ -200,19 +200,11 @@ void configuredLookups(@TempDir Path tempDirectory) throws Exception { UnArchiver unarchiver = manager.createUnArchiver(archiveFile, configurer -> { configurer.setDestinationDirectory(outputDirectory); }); - AbstractPlexusIoArchiveResourceCollection resourceCollection = (AbstractPlexusIoArchiveResourceCollection) - manager.createResourceCollection( - archiveFile, - configurer -> { - configurer.prefix("content/"); - }); assertThat(archiver.getDestFile()).isEqualTo(archiveFile.toFile()); assertThat(secondArchiver).isNotSameAs(archiver); assertThat(unarchiver.getSourceFile()).isEqualTo(archiveFile.toFile()); assertThat(unarchiver.getDestDirectory()).isEqualTo(outputDirectory.toFile()); - assertThat(resourceCollection.getFile()).isEqualTo(archiveFile.toFile()); - assertThat(resourceCollection.getPrefix()).isEqualTo("content/"); } @Test diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java deleted file mode 100644 index 415ead751..000000000 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/PlexusIoResourceCollectionProviderIT.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.provider; - -import java.lang.reflect.Modifier; -import java.nio.charset.StandardCharsets; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.List; - -import org.codehaus.plexus.archiver.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.EmptyDirectoryHandling; -import org.codehaus.plexus.archivers.config.PathPatternMatcher; -import org.codehaus.plexus.archivers.config.ResourceScan; -import org.codehaus.plexus.archivers.config.StandardExcludes; -import org.codehaus.plexus.archivers.config.SymbolicLinkHandling; -import org.codehaus.plexus.archivers.provider.AbstractPlexusIoResourceCollectionProvider; -import org.codehaus.plexus.archivers.provider.PlexusIoResourceCollectionProvider; -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 net.bytebuddy.build.ToStringPlugin.Exclude; - -import static org.assertj.core.api.Assertions.assertThat; - -class PlexusIoResourceCollectionProviderIT { - - @Test - void exposesOnlyConfiguredCreation() { - assertThat(PlexusIoResourceCollectionProvider.class.getPermittedSubclasses()) - .containsExactly(AbstractPlexusIoResourceCollectionProvider.class); - } - - @Test - void configuresArchiveResourceCollection(@TempDir Path directory) { - Path source = directory.resolve("source.zip"); - - AbstractPlexusIoResourceCollection collection = (AbstractPlexusIoResourceCollection) new PlexusArchiverZipFileResourceCollectionProvider() - .create(source, configurer -> { - configurer.prefix("content/"); - configurer.matcher(PathPatternMatcher - .includes("**/*.txt") - .excludes("**/ignored.txt") - .standardExcludes(StandardExcludes.NONE) - .caseSensitive(CaseSensitivity.INSENSITIVE)); -// configurer.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); -// configurer.setEncoding(StandardCharsets.UTF_8); - }); - - assertThat(((AbstractPlexusIoArchiveResourceCollection) collection).getFile()).isEqualTo(source.toFile()); - assertThat(collection.getPrefix()).isEqualTo("content/"); - assertThat(collection.getIncludes()).containsExactly("**/*.txt"); - assertThat(collection.getExcludes()).containsExactly("**/ignored.txt"); - assertThat(collection.isCaseSensitive()).isFalse(); - assertThat(collection.isUsingDefaultExcludes()).isFalse(); - assertThat(collection.isIncludingEmptyDirectories()).isFalse(); - } - - @Test - void configuresFilesystemResourceCollection(@TempDir Path directory) { - PlexusIoFileResourceCollection collection = (PlexusIoFileResourceCollection) new PlexusIoFileResourceCollectionProvider() - .create(directory, configurer -> { - configurer.setSymbolicLinkHandling(SymbolicLinkHandling.PRESERVE); - }); - - assertThat(collection.getBaseDir()).isEqualTo(directory.toFile()); - assertThat(collection.isFollowingSymLinks()).isFalse(); - } - - @Test - void configuresCompressedResourceCollectionSource(@TempDir Path directory) { - Path source = directory.resolve("source.gz"); - - PlexusIoCompressedFileResourceCollection collection = (PlexusIoCompressedFileResourceCollection) new PlexusIoGzipResourceCollectionProvider() - .create(source, configurer -> {}); - - assertThat(collection.getFile()).isEqualTo(source.toFile()); - } -} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java index 26a136baa..ca168f7b5 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ArchiverManager.java @@ -27,7 +27,6 @@ import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.archivers.config.ArchiverConfigurer; -import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.archivers.config.UnArchiverConfigurer; @@ -122,13 +121,4 @@ default UnArchiver createUnArchiver(@Nonnull Path srcFile, Consumer configurer) throws NoSuchArchiverException { - Objects.requireNonNull(srcFile, "srcFile"); - Objects.requireNonNull(configurer, "configurer"); - - String format = FileNames.getFileExtension(srcFile); - - return getResourceCollectionFactory(format).create(srcFile, configurer); - } } diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java deleted file mode 100644 index 35d3cd58f..000000000 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/PlexusIoResourceCollectionFactory.java +++ /dev/null @@ -1,53 +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.nio.file.Path; -import java.util.Objects; -import java.util.function.Consumer; - -import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; -import org.codehaus.plexus.components.io.resources.PlexusIoArchivedResourceCollection; -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( - Path path, - Consumer configurer) { - - Objects.requireNonNull(path, "scan"); - Objects.requireNonNull(configurer, "configurer"); - - PlexusIoResourceCollection collection = create(); - if(collection instanceof PlexusIoArchivedResourceCollection coll) { - coll.setFile(path.toFile()); - } - - configurer.accept(PlexusIoResourceCollectionConfigurer.of(collection)); - - return collection; - } -} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java index abd5e0227..a3710a4ad 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -26,7 +26,6 @@ import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archivers.config.ArchiverConfigurer; -import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer; import org.codehaus.plexus.archivers.config.ResourceEmitConfigurer; import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.archiver.UnArchiver; @@ -116,12 +115,6 @@ private static PlexusIoResourceCollectionFactory toPlexusIoResourceCollectionFac public PlexusIoResourceCollection create() { return provider.create(); } - - @Override - public PlexusIoResourceCollection create(Path path, - Consumer configurer) { - return provider.create(path, configurer); - } }; } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java deleted file mode 100644 index ab4ffb210..000000000 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultPlexusIoResourceCollectionConfigurer.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright MojoHaus and Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.codehaus.plexus.archivers.config; - -import java.nio.charset.Charset; -import java.nio.file.Path; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.function.Consumer; - -import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; -import org.codehaus.plexus.archiver.util.DefaultFileSet; -import org.codehaus.plexus.components.io.filemappers.FileMapper; -import org.codehaus.plexus.components.io.fileselectors.FileSelector; -import org.codehaus.plexus.components.io.functions.InputStreamTransformer; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection; -import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection; -import org.codehaus.plexus.components.io.resources.EncodingSupported; -import org.codehaus.plexus.components.io.resources.PlexusIoCompressedFileResourceCollection; -import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; -import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; - -/** - * Applies the configuration to the applied resourceCollection - * - * @since 5.0.0 - */ -final class DefaultPlexusIoResourceCollectionConfigurer implements PlexusIoResourceCollectionConfigurer { - private final PlexusIoResourceCollection collection; - - DefaultPlexusIoResourceCollectionConfigurer(PlexusIoResourceCollection collection) { - this.collection = Objects.requireNonNull(collection, "collection"); - } - - @Override - public void matcher(PathPatternMatcher matcher) { - // TODO Auto-generated method stub - - } - - @Override - public void prefix(String prefix) { - configurableCollection().setPrefix(Objects.requireNonNull(prefix, "prefix")); - } - - public void setFileSelectors(List fileSelectors) { - configurableCollection().setFileSelectors(List.copyOf(fileSelectors).toArray(FileSelector[]::new)); - } - -// @Override - public void setFileMappers(Collection fileMappers) { - configurableCollection().setFileMappers(List.copyOf(fileMappers).toArray(FileMapper[]::new)); - } - -// @Override - public void setStreamTransformer(InputStreamTransformer streamTransformer) { - configurableCollection().setStreamTransformer(Objects.requireNonNull(streamTransformer, "streamTransformer")); - } - - public void setCaseSensitivity(CaseSensitivity caseSensitivity) { - configurableCollection().setCaseSensitive(CaseSensitivities.resolve(caseSensitivity)); - } - -// @Override - public void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling) { - configurableCollection() - .setIncludingEmptyDirectories(Objects.requireNonNull(emptyDirectoryHandling, "emptyDirectoryHandling") - == EmptyDirectoryHandling.INCLUDE); - } - - public void setEncoding(Charset charset) { - if (!(collection instanceof EncodingSupported encodingSupported)) { - throw unsupported("filename encoding"); - } - encodingSupported.setEncoding(Objects.requireNonNull(charset, "charset")); - } - - @Override - public void setSymbolicLinkHandling(SymbolicLinkHandling symbolicLinkHandling) { - Objects.requireNonNull(symbolicLinkHandling, "symbolicLinkHandling"); - if (!(collection instanceof PlexusIoFileResourceCollection fileCollection)) { - throw unsupported("symbolic-link traversal"); - } - fileCollection.setFollowingSymLinks(symbolicLinkHandling == SymbolicLinkHandling.FOLLOW); - } - - private UnsupportedOperationException unsupported(String capability) { - return new UnsupportedOperationException(collection.getClass().getName() + " does not support " + capability); - } - - private AbstractPlexusIoResourceCollection configurableCollection() { - if (collection instanceof AbstractPlexusIoResourceCollection configurableCollection) { - return configurableCollection; - } - throw unsupported("common resource collection configuration"); - } -} diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java deleted file mode 100644 index c37a3ed23..000000000 --- a/src/main/java17/org/codehaus/plexus/archivers/config/PlexusIoResourceCollectionConfigurer.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.codehaus.plexus.archivers.config; - -import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; - -public interface PlexusIoResourceCollectionConfigurer { - - public static PlexusIoResourceCollectionConfigurer of(PlexusIoResourceCollection collection) { - return new DefaultPlexusIoResourceCollectionConfigurer(collection); - } - - void matcher(PathPatternMatcher matcher); - - void prefix(String prefix); - - void setSymbolicLinkHandling(SymbolicLinkHandling handling); - -} From 8eefeb90300cd0391e3dae578e463d396100770e Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sat, 10 Oct 2026 17:56:04 +0200 Subject: [PATCH 18/20] Refactor for #500 --- .../plexus/archiver/AbstractArchiver.java | 34 ++++----------- .../AbstractResourceCollectionRegistry.java | 40 ++++++++++++++++++ .../CdiResourceCollectionRegistry.java | 27 ++++++++++++ .../DefaultResourceCollectionRegistry.java | 11 +++++ .../manager/ResourceCollectionRegistry.java | 10 +++++ .../manager/ServiceLoaderArchiverFactory.java | 42 +++++++++++++++++++ .../manager/ServiceLoaderArchiverManager.java | 27 ++++-------- 7 files changed, 145 insertions(+), 46 deletions(-) create mode 100644 src/main/java/org/codehaus/plexus/archiver/manager/AbstractResourceCollectionRegistry.java create mode 100644 src/main/java/org/codehaus/plexus/archiver/manager/CdiResourceCollectionRegistry.java create mode 100644 src/main/java/org/codehaus/plexus/archiver/manager/DefaultResourceCollectionRegistry.java create mode 100644 src/main/java/org/codehaus/plexus/archiver/manager/ResourceCollectionRegistry.java create mode 100644 src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverFactory.java diff --git a/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java b/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java index 7a018969c..7e6fc000c 100755 --- a/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java @@ -18,7 +18,6 @@ import javax.annotation.Nonnull; import javax.inject.Inject; -import javax.inject.Provider; import java.io.Closeable; import java.io.File; @@ -35,9 +34,8 @@ import java.util.NoSuchElementException; import java.util.Set; -import org.codehaus.plexus.archiver.manager.ArchiverManager; import org.codehaus.plexus.archiver.manager.NoSuchArchiverException; -import org.codehaus.plexus.archiver.manager.ServiceLoaderArchiverManager; +import org.codehaus.plexus.archiver.manager.ResourceCollectionRegistry; import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributeUtils; import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes; import org.codehaus.plexus.components.io.attributes.SimpleResourceAttributes; @@ -125,18 +123,7 @@ protected Logger getLogger() { */ private String overrideGroupName; - /** - * Injected: Allows us to pull the ArchiverManager instance out of the container without causing a chicken-and-egg - * instantiation/composition problem. - */ - @Inject - private Provider archiverManagerProvider; - - /** - * Used instead of {@link #archiverManagerProvider} when this archiver was not created by a JSR-330 container, - * for example through {@link ServiceLoaderArchiverManager} or its constructor. - */ - private ArchiverManager serviceLoaderArchiverManager; + private ResourceCollectionRegistry resourceCollectionRegistry; private static class AddedResourceCollection { @@ -166,6 +153,11 @@ private int maybeOverridden(int suggestedMode, boolean isDir) { */ private boolean ignorePermissions = false; + @Inject + public void setResourceCollectionRegistry(ResourceCollectionRegistry resourceCollectionRegistry) { + this.resourceCollectionRegistry = resourceCollectionRegistry; + } + @Override public String getDuplicateBehavior() { return duplicateBehavior; @@ -589,23 +581,13 @@ public void setDestFile(final File destFile) { } } - private ArchiverManager getArchiverManager() { - if (archiverManagerProvider != null) { - return archiverManagerProvider.get(); - } - if (serviceLoaderArchiverManager == null) { - serviceLoaderArchiverManager = new ServiceLoaderArchiverManager(); - } - return serviceLoaderArchiverManager; - } - protected PlexusIoResourceCollection asResourceCollection(final ArchivedFileSet fileSet, Charset charset) throws ArchiverException { final File archiveFile = fileSet.getArchive(); final PlexusIoResourceCollection resources; try { - resources = getArchiverManager().getResourceCollection(archiveFile); + resources = resourceCollectionRegistry.getResourceCollection(archiveFile); } catch (final NoSuchArchiverException e) { throw new ArchiverException( "Error adding archived file-set. PlexusIoResourceCollection not found for: " + archiveFile, e); diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/AbstractResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractResourceCollectionRegistry.java new file mode 100644 index 000000000..54f1b8bd0 --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/AbstractResourceCollectionRegistry.java @@ -0,0 +1,40 @@ +package org.codehaus.plexus.archiver.manager; + +import javax.annotation.Nonnull; + +import java.io.File; +import java.util.Map; + +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +import static java.util.Objects.requireNonNull; + +abstract class AbstractResourceCollectionRegistry implements ResourceCollectionRegistry { + + private final Map plexusIoResourceCollections; + + protected AbstractResourceCollectionRegistry( + Map plexusIoResourceCollections) { + this.plexusIoResourceCollections = plexusIoResourceCollections; + } + + @Override + public final PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException { + return getResourceCollection(FileNames.getFileExtension(file)); + } + + public final PlexusIoResourceCollection getResourceCollection(String resourceCollectionName) + throws NoSuchArchiverException { + return getResourceCollectionFactory(resourceCollectionName).create(); + } + + public final PlexusIoResourceCollectionFactory getResourceCollectionFactory(String resourceCollectionName) + throws NoSuchArchiverException { + requireNonNull(resourceCollectionName); + PlexusIoResourceCollectionFactory resourceCollection = plexusIoResourceCollections.get(resourceCollectionName); + if (resourceCollection == null) { + throw new NoSuchArchiverException(resourceCollectionName); + } + return resourceCollection; + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/CdiResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/CdiResourceCollectionRegistry.java new file mode 100644 index 000000000..c789fb35f --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/CdiResourceCollectionRegistry.java @@ -0,0 +1,27 @@ +package org.codehaus.plexus.archiver.manager; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Provider; + +import java.util.Map; +import java.util.stream.Collectors; + +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +@Named +public class CdiResourceCollectionRegistry extends AbstractResourceCollectionRegistry { + + @Inject + public CdiResourceCollectionRegistry( + Map> plexusIoResourceCollections) { + super(plexusIoResourceCollections(plexusIoResourceCollections)); + } + + private static Map plexusIoResourceCollections( + Map> plexusIoResourceCollections) { + return plexusIoResourceCollections.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, entry -> new CdiPlexusIoResourceCollectionFactory(entry.getValue()))); + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/DefaultResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/DefaultResourceCollectionRegistry.java new file mode 100644 index 000000000..984656cf7 --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/DefaultResourceCollectionRegistry.java @@ -0,0 +1,11 @@ +package org.codehaus.plexus.archiver.manager; + +import java.util.Map; + +public class DefaultResourceCollectionRegistry extends AbstractResourceCollectionRegistry { + + public DefaultResourceCollectionRegistry( + Map plexusIoResourceCollections) { + super(plexusIoResourceCollections); + } +} diff --git a/src/main/java/org/codehaus/plexus/archiver/manager/ResourceCollectionRegistry.java b/src/main/java/org/codehaus/plexus/archiver/manager/ResourceCollectionRegistry.java new file mode 100644 index 000000000..086b16e61 --- /dev/null +++ b/src/main/java/org/codehaus/plexus/archiver/manager/ResourceCollectionRegistry.java @@ -0,0 +1,10 @@ +package org.codehaus.plexus.archiver.manager; + +import java.io.File; + +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; + +public interface ResourceCollectionRegistry { + + PlexusIoResourceCollection getResourceCollection(File archiveFile) throws NoSuchArchiverException; +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverFactory.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverFactory.java new file mode 100644 index 000000000..a149a50f3 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverFactory.java @@ -0,0 +1,42 @@ +package org.codehaus.plexus.archiver.manager; + +import java.nio.file.Path; +import java.util.Map; +import java.util.function.Consumer; + +import org.codehaus.plexus.archiver.AbstractArchiver; +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archivers.config.ArchiverConfigurer;; +import org.codehaus.plexus.archivers.provider.ArchiverProvider; + +class ServiceLoaderArchiverFactory implements ArchiverFactory { + + private final ArchiverProvider provider; + private final Map resourceCollectionFactories; + + ServiceLoaderArchiverFactory(ArchiverProvider provider, Map resourceCollectionFactories) { + this.provider = provider; + this.resourceCollectionFactories = resourceCollectionFactories; + } + + @Override + public Archiver create() { + Archiver archiver = provider.newArchiver(c -> {}); + + if(archiver instanceof AbstractArchiver aa) { + aa.setResourceCollectionRegistry(new DefaultResourceCollectionRegistry(resourceCollectionFactories)); + } + return archiver; + } + + @Override + public Archiver create(Path path, Consumer configurer) { + Archiver archiver = provider.newArchiver(configurer); + archiver.setDestFile(path.toFile()); + + if(archiver instanceof AbstractArchiver aa) { + aa.setResourceCollectionRegistry(new DefaultResourceCollectionRegistry(resourceCollectionFactories)); + } + return archiver; + } +} diff --git a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java index a3710a4ad..ea562ac91 100644 --- a/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java +++ b/src/main/java17/org/codehaus/plexus/archiver/manager/ServiceLoaderArchiverManager.java @@ -39,26 +39,26 @@ class ServiceLoaderArchiverManager extends AbstractArchiverManager { ServiceLoaderArchiverManager() { - super(archivers(ServiceLoader.load(ArchiverProvider.class)), + super(archivers(ServiceLoader.load(ArchiverProvider.class), plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class))), unarchivers(ServiceLoader.load(UnArchiverProvider.class)), plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class))); } ServiceLoaderArchiverManager(ClassLoader classLoader) { - super(archivers(ServiceLoader.load(ArchiverProvider.class, classLoader)), + super(archivers(ServiceLoader.load(ArchiverProvider.class, classLoader), plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class, classLoader))), unarchivers(ServiceLoader.load(UnArchiverProvider.class, classLoader)), plexusIoResourceCollections(ServiceLoader.load(PlexusIoResourceCollectionProvider.class, classLoader))); } ServiceLoaderArchiverManager(ModuleLayer moduleLayer) { - super(archivers(ServiceLoader.load(moduleLayer, ArchiverProvider.class)), + super(archivers(ServiceLoader.load(moduleLayer, ArchiverProvider.class), plexusIoResourceCollections(ServiceLoader.load(moduleLayer, PlexusIoResourceCollectionProvider.class))), unarchivers(ServiceLoader.load(moduleLayer, UnArchiverProvider.class)), plexusIoResourceCollections(ServiceLoader.load(moduleLayer, PlexusIoResourceCollectionProvider.class))); } - private static Map archivers(ServiceLoader serviceLoader) { + private static Map archivers(ServiceLoader serviceLoader, Map resourceCollectionFactories) { return StreamSupport.stream(serviceLoader.spliterator(), false) - .collect(Collectors.toMap(ArchiverProvider::getName, ServiceLoaderArchiverManager::toArchiverFactory)); + .collect(Collectors.toMap(ArchiverProvider::getName, p -> ServiceLoaderArchiverManager.toArchiverFactory(p, resourceCollectionFactories))); } private static Map unarchivers(ServiceLoader serviceLoader) { @@ -74,21 +74,8 @@ private static Map plexusIoResourceCo } - private static ArchiverFactory toArchiverFactory(ArchiverProvider provider) { - return new ArchiverFactory() { - - @Override - public Archiver create() { - return provider.newArchiver(c -> {}); - } - - @Override - public Archiver create(Path path, Consumer configurer) { - Archiver archiver = provider.newArchiver(configurer); - archiver.setDestFile(path.toFile()); - return archiver; - } - }; + private static ArchiverFactory toArchiverFactory(ArchiverProvider provider, Map resourceCollectionFactories) { + return new ServiceLoaderArchiverFactory(provider, resourceCollectionFactories); } private static UnArchiverFactory toUnArchiverFactory(UnArchiverProvider provider) { From 7bf927296b1eebf1a1425221693d19d6f3c07d70 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sun, 11 Oct 2026 11:56:44 +0200 Subject: [PATCH 19/20] rewrite filemode/directorymode --- .../provider/ArchiverProviderIT.java | 11 ++--- .../archivers/config/ArchiverConfigurer.java | 30 ++---------- .../config/DefaultArchiverConfigurer.java | 26 +++++----- .../archivers/config/DirectoryMode.java | 49 +++++++++++++++++++ .../plexus/archivers/config/FileMode.java | 49 +++++++++++++++++++ .../plexus/archivers/config/PathMatchers.java | 15 ------ 6 files changed, 117 insertions(+), 63 deletions(-) create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/DirectoryMode.java create mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/FileMode.java delete mode 100644 src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index ad105d80c..da1828ce0 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -33,11 +33,12 @@ import org.codehaus.plexus.archivers.config.ArchiverConfigurer; import org.codehaus.plexus.archivers.config.CaseSensitivities; import org.codehaus.plexus.archivers.config.CaseSensitivity; +import org.codehaus.plexus.archivers.config.DirectoryMode; import org.codehaus.plexus.archivers.config.DuplicateHandling; import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling; import org.codehaus.plexus.archivers.config.PermissionHandling; +import org.codehaus.plexus.archivers.config.FileMode; import org.codehaus.plexus.archivers.config.FilePermissions; -import org.codehaus.plexus.archivers.config.PathMatchers; import org.codehaus.plexus.archivers.config.PathPatternMatcher; import org.codehaus.plexus.archivers.config.ResourceScan; import org.codehaus.plexus.archivers.config.StandardExcludes; @@ -148,10 +149,8 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { Archiver actual = providerFor(expected).newArchiver(configurer -> { configurer.setDestFile(directory.resolve("archive.zip")); - configurer.setFileMode(FilePermissions.parse("rw-r--r--")); - configurer.setDefaultFileMode(FilePermissions.parse("rw-r-----")); - configurer.setDirectoryMode(FilePermissions.parse("rwxr-xr-x")); - configurer.setDefaultDirectoryMode(FilePermissions.parse("rwxr-x---")); + configurer.setFileMode(FileMode.override(FilePermissions.parse("rw-r--r--"))); + configurer.setDirectoryMode(DirectoryMode.override(FilePermissions.parse("rwxr-xr-x"))); configurer.setEmptyDirectoryHandling(EmptyDirectoryHandling.EXCLUDE); configurer.setDotFileDirectory(directory); configurer.setForced(ArchiveCreation.WHEN_NEEDED); @@ -172,9 +171,7 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { assertThat(expected.forced).isFalse(); assertThat(expected.ignorePermissions).isTrue(); assertThat(expected.fileMode).isEqualTo(0644); - assertThat(expected.defaultFileMode).isEqualTo(0640); assertThat(expected.directoryMode).isEqualTo(0755); - assertThat(expected.defaultDirectoryMode).isEqualTo(0750); assertThat(expected.duplicateBehavior).isEqualTo(Archiver.DUPLICATES_FAIL); assertThat(expected.umask).isEqualTo(0022); } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index 14360663a..64d870519 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -41,33 +41,9 @@ ArchiverConfigurer resource( void setDestFile(Path destFile); - /** - * Sets the permissions used for regular files added to the archive. - * - * @param permissions the file permissions - */ - void setFileMode(FilePermissions permissions); - - /** - * Sets the default permissions used for regular files when no explicit mode is available. - * - * @param permissions the default file permissions - */ - void setDefaultFileMode(FilePermissions permissions); - - /** - * Sets the permissions used for directories added to the archive. - * - * @param permissions the directory permissions - */ - void setDirectoryMode(FilePermissions permissions); - - /** - * Sets the default permissions used for directories when no explicit mode is available. - * - * @param permissions the default directory permissions - */ - void setDefaultDirectoryMode(FilePermissions permissions); + void setFileMode(FileMode fileMode); + + void setDirectoryMode(DirectoryMode directoryMode); void setEmptyDirectoryHandling(EmptyDirectoryHandling emptyDirectoryHandling); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java index 76f918ed6..5f667a70e 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -79,23 +79,21 @@ public void setDestFile(Path destFile) { } @Override - public void setFileMode(FilePermissions permissions) { - archiver.setFileMode(toMode(permissions)); - } - - @Override - public void setDefaultFileMode(FilePermissions permissions) { - archiver.setDefaultFileMode(toMode(permissions)); - } - - @Override - public void setDirectoryMode(FilePermissions permissions) { - archiver.setDirectoryMode(toMode(permissions)); + public void setFileMode(FileMode fileMode) { + if(fileMode instanceof OverrideFileMode o) { + archiver.setFileMode(toMode(o.permissions())); + } else if (fileMode instanceof FallbackFileMode f) { + archiver.setDefaultFileMode(toMode(f.permissions())); + } } @Override - public void setDefaultDirectoryMode(FilePermissions permissions) { - archiver.setDefaultDirectoryMode(toMode(permissions)); + public void setDirectoryMode(DirectoryMode directoryMode) { + if(directoryMode instanceof OverrideDirectoryMode o) { + archiver.setDirectoryMode(toMode(o.permissions())); + } else if(directoryMode instanceof FallbackDirectoryMode f) { + archiver.setDefaultDirectoryMode(toMode(f.permissions())); + } } @Override diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DirectoryMode.java b/src/main/java17/org/codehaus/plexus/archivers/config/DirectoryMode.java new file mode 100644 index 000000000..74d6fe377 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DirectoryMode.java @@ -0,0 +1,49 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Objects; + +/** + * Specifies how permissions are selected for emitted archive entries. + * + * @since 5.0.0 + */ +public sealed interface DirectoryMode + permits InheritedDirectoryMode, OverrideDirectoryMode, FallbackDirectoryMode { + + /** + * Preserve source permissions when available. + * Otherwise, use the archiver's built-in fallback. + * + * This is the default policy. + */ + DirectoryMode INHERIT = new InheritedDirectoryMode(); + + /** + * Replace source permissions with the supplied permissions. + */ + static DirectoryMode override(FilePermissions permissions) { + return new OverrideDirectoryMode(permissions); + } + + /** + * Preserve source permissions when available. + * Use the supplied permissions only when the source has none. + */ + static DirectoryMode fallback(FilePermissions permissions) { + return new FallbackDirectoryMode(permissions); + } +} + +record InheritedDirectoryMode() implements DirectoryMode {} + +record OverrideDirectoryMode(FilePermissions permissions) implements DirectoryMode { + OverrideDirectoryMode { + Objects.requireNonNull(permissions, "permissions"); + } +} + +record FallbackDirectoryMode(FilePermissions permissions) implements DirectoryMode { + FallbackDirectoryMode { + Objects.requireNonNull(permissions, "permissions"); + } +} \ No newline at end of file diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/FileMode.java b/src/main/java17/org/codehaus/plexus/archivers/config/FileMode.java new file mode 100644 index 000000000..b1cf70720 --- /dev/null +++ b/src/main/java17/org/codehaus/plexus/archivers/config/FileMode.java @@ -0,0 +1,49 @@ +package org.codehaus.plexus.archivers.config; + +import java.util.Objects; + +/** + * Specifies how permissions are selected for emitted archive entries. + * + * @since 5.0.0 + */ +public sealed interface FileMode + permits InheritedFileMode, OverrideFileMode, FallbackFileMode { + + /** + * Preserve source permissions when available. + * Otherwise, use the archiver's built-in fallback. + * + * This is the default policy. + */ + FileMode INHERIT = new InheritedFileMode(); + + /** + * Replace source permissions with the supplied permissions. + */ + static FileMode override(FilePermissions permissions) { + return new OverrideFileMode(permissions); + } + + /** + * Preserve source permissions when available. + * Use the supplied permissions only when the source has none. + */ + static FileMode fallback(FilePermissions permissions) { + return new FallbackFileMode(permissions); + } +} + +record InheritedFileMode() implements FileMode {} + +record OverrideFileMode(FilePermissions permissions) implements FileMode { + OverrideFileMode { + Objects.requireNonNull(permissions, "permissions"); + } +} + +record FallbackFileMode(FilePermissions permissions) implements FileMode { + FallbackFileMode { + Objects.requireNonNull(permissions, "permissions"); + } +} \ No newline at end of file diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java b/src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java deleted file mode 100644 index b47e70713..000000000 --- a/src/main/java17/org/codehaus/plexus/archivers/config/PathMatchers.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.codehaus.plexus.archivers.config; - -import java.nio.file.PathMatcher; -import java.util.Collection; - -public final class PathMatchers { - - private PathMatchers() { - - } - - public static PathMatcher antPatterns(Collection includes, Collection excludes) { - throw new UnsupportedOperationException(); - } -} From 3e008b7e1bd31e9f6c95c0fe5fec871f620e7be4 Mon Sep 17 00:00:00 2001 From: Robert Scholte Date: Sun, 11 Oct 2026 20:00:12 +0200 Subject: [PATCH 20/20] move reproducible build config --- .../provider/ArchiverProviderIT.java | 15 ++++---- .../archivers/config/ArchiverConfigurer.java | 12 ------- .../config/DefaultArchiverConfigurer.java | 36 ------------------- .../DefaultReproducibleBuildConfigurer.java | 26 ++++++++++++++ .../config/ReproducibleBuildConfigurer.java | 34 ++++++++++++++++-- 5 files changed, 65 insertions(+), 58 deletions(-) diff --git a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java index da1828ce0..b911cff59 100644 --- a/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java +++ b/src/it/java17/org/codehaus/plexus/archivers/provider/ArchiverProviderIT.java @@ -156,14 +156,15 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) { configurer.setForced(ArchiveCreation.WHEN_NEEDED); configurer.setDuplicateBehavior(DuplicateHandling.FAIL); configurer.setIgnorePermissions(PermissionHandling.IGNORE); - configurer.setLastModifiedTime(timestamp); - configurer.setFilenameComparator(Comparator.naturalOrder()); - configurer.setOverrideUid(1000); - configurer.setOverrideUserName("user"); - configurer.setOverrideGid(1000); - configurer.setOverrideGroupName("group"); configurer.setUmask(FilePermissions.parse("----w--w-")); - configurer.configureReproducibleBuild(c -> c.setDefaultLastModifiedTime(timestamp)); + configurer.configureReproducibleBuild(c -> { + c.setDefaultLastModifiedTime(timestamp); + c.setDefaultUid(1000); + c.setDefaultUserName("user"); + c.setDefaultGid(1000); + c.setDefaultGroupName("group"); + c.setFilenameComparator(Comparator.naturalOrder()); + }); }); assertThat(actual).isSameAs(expected); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java index 64d870519..240ea8265 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ArchiverConfigurer.java @@ -55,18 +55,6 @@ ArchiverConfigurer resource( void setIgnorePermissions(PermissionHandling permissionHandling); - void setLastModifiedTime(FileTime lastModifiedTime); - - void setFilenameComparator(Comparator filenameComparator); - - void setOverrideUid(int uid); - - void setOverrideUserName(String userName); - - void setOverrideGid(int gid); - - void setOverrideGroupName(String groupName); - void setUmask(FilePermissions permissions); void configureReproducibleBuild(Consumer reproducibleBuildSpec); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java index 5f667a70e..877910661 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultArchiverConfigurer.java @@ -131,42 +131,6 @@ public void setIgnorePermissions(PermissionHandling permissionHandling) { Objects.requireNonNull(permissionHandling, "permissionHandling") == PermissionHandling.IGNORE); } - @Override - public void setLastModifiedTime(FileTime lastModifiedTime) { - archiver.setLastModifiedTime(Objects.requireNonNull(lastModifiedTime, "lastModifiedTime")); - } - - @Override - public void setFilenameComparator(Comparator filenameComparator) { - archiver.setFilenameComparator(Objects.requireNonNull(filenameComparator, "filenameComparator")); - } - - @Override - public void setOverrideUid(int uid) { - if (uid < 0) { - throw new IllegalArgumentException("uid must not be negative"); - } - archiver.setOverrideUid(uid); - } - - @Override - public void setOverrideUserName(String userName) { - archiver.setOverrideUserName(Objects.requireNonNull(userName, "userName")); - } - - @Override - public void setOverrideGid(int gid) { - if (gid < 0) { - throw new IllegalArgumentException("gid must not be negative"); - } - archiver.setOverrideGid(gid); - } - - @Override - public void setOverrideGroupName(String groupName) { - archiver.setOverrideGroupName(Objects.requireNonNull(groupName, "groupName")); - } - @Override public void setUmask(FilePermissions permissions) { archiver.setUmask(toMode(permissions)); diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java index c7e4f1028..7996f63d6 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/DefaultReproducibleBuildConfigurer.java @@ -17,6 +17,7 @@ package org.codehaus.plexus.archivers.config; import java.nio.file.attribute.FileTime; +import java.util.Comparator; import org.codehaus.plexus.archiver.Archiver; @@ -37,4 +38,29 @@ final class DefaultReproducibleBuildConfigurer implements ReproducibleBuildConfi public void setDefaultLastModifiedTime(FileTime fileTime) { archiver.configureReproducibleBuild(fileTime); } + + @Override + public void setDefaultUid(int uid) { + archiver.setOverrideUid(uid); + } + + @Override + public void setDefaultUserName(String userName) { + archiver.setOverrideUserName(userName); + } + + @Override + public void setDefaultGid(int gid) { + archiver.setOverrideGid(gid); + } + + @Override + public void setDefaultGroupName(String groupName) { + archiver.setOverrideGroupName(groupName); + } + + @Override + public void setFilenameComparator(Comparator filenameComparator) { + archiver.setFilenameComparator(filenameComparator); + } } diff --git a/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java b/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java index d5c08eea9..d48bf83eb 100644 --- a/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java +++ b/src/main/java17/org/codehaus/plexus/archivers/config/ReproducibleBuildConfigurer.java @@ -18,6 +18,7 @@ package org.codehaus.plexus.archivers.config; import java.nio.file.attribute.FileTime; +import java.util.Comparator; /** * Configures reproducible build content on an archiver without exposing its implementations. @@ -29,7 +30,34 @@ * @since 5.0.0 */ public interface ReproducibleBuildConfigurer { - - void setDefaultLastModifiedTime(FileTime fileTime); - + + /** + * Sets the default last modified time for all archive entries. + */ + void setDefaultLastModifiedTime(FileTime fileTime); + + /** + * Sets the default uid for all archive entries. + */ + void setDefaultUid(int uid); + + /** + * Sets the default username for all archive entries. + */ + void setDefaultUserName(String userName); + + /** + * Sets the default gid for all archive entries. + */ + void setDefaultGid(int gid); + + /** + * Sets the default group name for all archive entries. + */ + void setDefaultGroupName(String groupName); + + /** + * Sets the comparator used to sort filenames when scanning directories. + */ + void setFilenameComparator(Comparator filenameComparator); }