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>
<version.sisu>1.1.0</version.sisu>
<project.build.outputTimestamp>2026-06-08T20:12:28Z</project.build.outputTimestamp>
Expand Down Expand Up @@ -210,4 +209,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 @@ -27,18 +27,25 @@

import org.codehaus.plexus.archiver.ArchivedFileSet;
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.CaseSensitivities;
import org.codehaus.plexus.archiver.CaseSensitivity;
import org.codehaus.plexus.archiver.DefaultExcludes;
import org.codehaus.plexus.archiver.EmptyDirectoryHandling;
import org.codehaus.plexus.archiver.FileSet;
import org.codehaus.plexus.archiver.diags.NoOpArchiver;
import org.codehaus.plexus.archivers.config.ArchiveCreation;
import org.codehaus.plexus.archivers.config.ArchivedFileSetSpec;
import org.codehaus.plexus.archivers.config.ArchiverConfigurer;
import org.codehaus.plexus.archivers.config.CaseSensitivities;
import org.codehaus.plexus.archivers.config.CaseSensitivity;
import org.codehaus.plexus.archivers.config.DefaultExcludes;
import org.codehaus.plexus.archivers.config.DuplicateHandling;
import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling;
import org.codehaus.plexus.archivers.config.FileSetSpec;
import org.codehaus.plexus.archivers.config.PermissionHandling;
import org.codehaus.plexus.archivers.config.UnixPermissions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

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

class ArchiverProviderTest {
class ArchiverProviderIT {

@Test
void doesNotExposeUnconfiguredArchiverCreation() {
Expand All @@ -51,15 +58,20 @@ void doesNotExposeUnconfiguredArchiverCreation() {
.doesNotContain("create");
assertThat(Arrays.stream(ArchiverConfigurer.class.getMethods())
.filter(method -> Modifier.isStatic(method.getModifiers())))
.isEmpty();
.satisfiesExactly(m -> {
assertThat(m.getName()).isEqualTo("of");
assertThat(m.getParameterCount()).isEqualTo(1);
assertThat(m.getParameterTypes()[0]).isEqualTo(Archiver.class);
assertThat(m.getReturnType()).isEqualTo(ArchiverConfigurer.class);
});
}

@Test
void configuresNewArchiverWithoutExposingFileSetImplementations(@TempDir Path directory) {
CapturingArchiver expected = new CapturingArchiver();
ArchiverProvider provider = providerFor(expected);

Archiver actual = provider.newArchiver(configurer -> configurer.addFileSet(FileSet.of(directory)
Archiver actual = provider.newArchiver(configurer -> configurer.addFileSetFromSpec(FileSetSpec.of(directory)
.prefixed("content/")
.including(List.of("**/*.txt"))
.excluding(List.of("**/ignored.txt"))
Expand All @@ -83,7 +95,7 @@ void configuresArchivedFileSet(@TempDir Path directory) {
CapturingArchiver expected = new CapturingArchiver();
ArchiverProvider provider = providerFor(expected);

provider.newArchiver(configurer -> configurer.addArchivedFileSet(ArchivedFileSet.of(archive)
provider.newArchiver(configurer -> configurer.addArchivedFileSetFromSpec(ArchivedFileSetSpec.of(archive)
.prefixed("lib/")
.including(List.of("**/*.class"))
.excluding(List.of("module-info.class"))
Expand Down Expand Up @@ -124,7 +136,7 @@ void exposesEveryArchiverSetterWithOneArgument(@TempDir Path directory) {
configurer.setOverrideGid(1000);
configurer.setOverrideGroupName("group");
configurer.setUmask(UnixPermissions.of(PosixFilePermissions.fromString("----w--w-")));
configurer.configureReproducibleBuild(timestamp);
configurer.configureReproducibleBuild(c -> c.setDefaultLastModifiedTime(timestamp));
});

assertThat(actual).isSameAs(expected);
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.CaseSensitivity;
import org.codehaus.plexus.archiver.DefaultExcludes;
import org.codehaus.plexus.archiver.EmptyDirectoryHandling;
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.gzip.PlexusIoGzipResourceCollectionProvider;
import org.codehaus.plexus.archiver.resources.PlexusIoFileResourceCollectionProvider;
import org.codehaus.plexus.archiver.zip.PlexusArchiverZipFileResourceCollectionProvider;
import org.codehaus.plexus.archivers.config.ArchiverConfigurer;
import org.codehaus.plexus.archivers.config.CaseSensitivity;
import org.codehaus.plexus.archivers.config.DefaultExcludes;
import org.codehaus.plexus.archivers.config.EmptyDirectoryHandling;
import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer;
import org.codehaus.plexus.archivers.config.SymbolicLinkHandling;
import org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection;
import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection;
import org.codehaus.plexus.components.io.resources.PlexusIoCompressedFileResourceCollection;
import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection;
import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

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

class PlexusIoResourceCollectionProviderTest {
class PlexusIoResourceCollectionProviderIT {

@Test
void exposesOnlyConfiguredCreation() {
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 Expand Up @@ -87,7 +97,7 @@ void configuresFilesystemResourceCollection(@TempDir Path directory) {
PlexusIoFileResourceCollection collection = (PlexusIoFileResourceCollection)
new PlexusIoFileResourceCollectionProvider().newPlexusIoResourceCollection(configurer -> {
configurer.setSource(directory);
configurer.setSymbolicLinkHandling(SymbolicLinkHandling.DO_NOT_FOLLOW);
configurer.setSymbolicLinkHandling(SymbolicLinkHandling.PRESERVE);
});

assertThat(collection.getBaseDir()).isEqualTo(directory.toFile());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,43 @@

import org.codehaus.plexus.archiver.UnArchiver;
import org.codehaus.plexus.archiver.zip.ZipUnArchiverProvider;
import org.codehaus.plexus.archivers.config.ExistingFileHandling;
import org.codehaus.plexus.archivers.config.PermissionHandling;
import org.codehaus.plexus.archivers.config.PlexusIoResourceCollectionConfigurer;
import org.codehaus.plexus.archivers.config.UnArchiverConfigurer;
import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

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

class UnArchiverProviderTest {
class UnArchiverProviderIT {

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

@Test
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
Loading
Loading