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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ jobs:
[
{"jdk": "17.0.2", "os": "windows-latest", distribution: "zulu" }
]
matrix-exclude: >
[
{"jdk": "8"}
]

# deploy:
# name: Deploy
Expand Down
106 changes: 105 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
</distributionManagement>

<properties>
<javaVersion>17</javaVersion>
<slf4jVersion>1.7.36</slf4jVersion>
<sisuMavenPluginVersion>1.1.0</sisuMavenPluginVersion>
<project.build.outputTimestamp>2026-06-08T20:12:28Z</project.build.outputTimestamp>
Expand Down Expand Up @@ -201,4 +200,109 @@
</plugins>
</build>

<profiles>
<profile>
<id>java17</id>
<activation>
<jdk>[17,)</jdk>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>java17-main</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<release>17</release>
<compileSourceRoots>
<compileSourceRoot>${project.basedir}/src/main/java17</compileSourceRoot>
</compileSourceRoots>
<multiReleaseOutput>true</multiReleaseOutput>
</configuration>
</execution>
</executions>
</plugin>
<!-- maven-compiler-plugin:testCompile always uses target/classes, where javac cannot resolve
META-INF/versions/17. Compile these tests against the packaged multi-release JAR instead. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>compile-java17-integration-tests</id>
<goals>
<goal>run</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<target>
<delete dir="${project.build.directory}/it-classes" />
<mkdir dir="${project.build.directory}/it-classes" />
<javac destdir="${project.build.directory}/it-classes" encoding="${project.build.sourceEncoding}" includeantruntime="false" release="17" srcdir="${project.basedir}/src/it/java17">
<classpath>
<pathelement location="${project.build.directory}/${project.build.finalName}.jar" />
<path refid="maven.test.classpath" />
</classpath>
</javac>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.directory}/${project.build.finalName}.jar</classesDirectory>
<testClassesDirectory>${project.build.directory}/it-classes</testClassesDirectory>
<failIfNoTests>true</failIfNoTests>
<includes>
<include>**/*IT.class</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>plexus-release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-java-17-for-release</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[17,)</version>
<message>To release this MultiRelease jar, use at least Java 17</message>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

import static org.assertj.core.api.Assertions.assertThat;

class CdiFactoryTest {
class CdiFactoryIT {

@Test
void createsConfiguredArchivers(@TempDir Path directory) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> getArchiversAndUnArchiverForTests() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -51,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,27 @@
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.components.io.resources.AbstractPlexusIoArchiveResourceCollection;
import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection;
import org.codehaus.plexus.components.io.resources.PlexusIoCompressedFileResourceCollection;
import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection;
import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

import static org.assertj.core.api.Assertions.assertThat;

class PlexusIoResourceCollectionProviderTest {
class PlexusIoResourceCollectionProviderIT {

@Test
void exposesOnlyConfiguredCreation() {
Expand All @@ -53,7 +58,12 @@ void exposesOnlyConfiguredCreation() {
.doesNotContain("create");
assertThat(Arrays.stream(PlexusIoResourceCollectionConfigurer.class.getMethods())
.filter(method -> Modifier.isStatic(method.getModifiers())))
.isEmpty();
.satisfiesExactly(m -> {
assertThat(m.getName()).isEqualTo("of");
assertThat(m.getParameterCount()).isEqualTo(1);
assertThat(m.getParameterTypes()[0]).isEqualTo(PlexusIoResourceCollection.class);
assertThat(m.getReturnType()).isEqualTo(PlexusIoResourceCollectionConfigurer.class);
});
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,35 +22,45 @@
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.components.io.resources.PlexusIoResourceCollection;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

import static org.assertj.core.api.Assertions.assertThat;

class UnArchiverProviderTest {
class UnArchiverProviderIT {

@Test
void exposesOnlyConfiguredCreation() {
assertThat(UnArchiverProvider.class.getPermittedSubclasses()).containsExactly(AbstractUnArchiverProvider.class);
assertThat(Arrays.stream(UnArchiverProvider.class.getMethods())
.filter(method -> method.getName().equals("newUnarchiver"))
.filter(method -> method.getName().equals("newUnArchiver"))
.map(method -> method.getParameterCount()))
.containsExactly(1);
assertThat(Arrays.stream(AbstractUnArchiverProvider.class.getMethods()).map(method -> method.getName()))
.doesNotContain("create");
assertThat(Arrays.stream(UnArchiverConfigurer.class.getMethods())
.filter(method -> Modifier.isStatic(method.getModifiers())))
.isEmpty();
.satisfiesExactly(m -> {
assertThat(m.getName()).isEqualTo("of");
assertThat(m.getParameterCount()).isEqualTo(1);
assertThat(m.getParameterTypes()[0]).isEqualTo(UnArchiver.class);
assertThat(m.getReturnType()).isEqualTo(UnArchiverConfigurer.class);
});
}

@Test
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);
Expand Down
41 changes: 22 additions & 19 deletions src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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();
}
}

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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);
}
}

Expand All @@ -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);
Expand Down
Loading
Loading