Strongly-typed, proxy-based Java abstraction for Amazon S3. Define plain Java interfaces that mirror your bucket structure and let JAWS translate method calls into efficient S3 API operations — no boilerplate, no manual key construction, no pagination code.
public interface Repository extends S3.Dir { Stream<GroupId> groups(); GroupId group(String name); } public interface GroupId extends S3.Dir { Stream<ArtifactId> artifacts(); ArtifactId artifact(String name); } public interface ArtifactId extends S3.Dir { Stream<Version> versions(); } public interface Version extends S3.Dir { @Suffix(".jar") Stream<S3File> jars(); @Suffix(".jar") @Suffix(value = {"-sources.jar", "-javadoc.jar"}, exclude = true) Stream<S3File> binaryJars(); }
S3Client s3 = new S3Client(S3AsyncClient.builder().build()); Repository repo = s3.getBucket("repository").as(Repository.class); repo.group("org/apache/maven") .artifact("maven-core") .versions() .forEach(v -> System.out.println(v.file().getName()));
Full documentation is available at tomitribe.github.io/jaws.