Using S3 as a maven repository with Gradle
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
gradle/wrapper
.gitignore
LICENSE.md
README.md
build.gradle
gradle.properties.template
gradlew
gradlew.bat
repositories.gradle
s3repo-demo.iml
settings.gradle

README.md

Using S3 as a maven repository with Gradle

The Amazon S3 service can be easily used as a Maven (or Ivy) repository with Gradle.

Advantages

  • Cheap
  • Secure
  • Online

Disadvantages

  • Lacks any administration, search
  • Snapshots must be pruned manually

Setup

Create an S3 bucket with any name. You can also re-use existing bucket and simply create a folder for your dependencies.

Add the following to your Gradle file to enable download of dependencies from S3:

apply plugin: 'maven'

repositories {
    maven {
        name "name your repo for later use"
        url "s3://bucket-name/maven"
        credentials(AwsCredentials) {
            accessKey "aws access key"
            secretKey "aws secret key"
        }
    }
}

To be able to publish artifacts to S3, you can use uploadArchives or the new maven-publish plugin. The following shows how to switch between two repositories and how to reference previously defined repositories. The switching works very well with Gradle Release Plugin.

apply plugin: 'maven-publish'

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        add project.version.endsWith('-SNAPSHOT') ? project.repositories.s3RepoSnapshots : project.repositories.s3RepoInternal
    }
}

To include source jars, test jars or other archives, e.g. from distribution plugin, add this to the publication. Group Id, Artifact Id can be set here as well.

apply plugin: 'maven-publish'

publishing {
    publications {
        maven(MavenPublication) {
            groupId `group`
            artifactId 'artifact'
            from components.java
            artifact sourceJar {
                classifier "sources"
            }
            artifact testJar {
                classifier "test"
            }
            artifact distZip {
                classifier "zip"
            }
        }
    }
}

Example

This repository contains an example of the S3 use. Rename gradle.properties.template to gradle.properties and add your own S3 config.

Migration from other maven repositories

I have successfully migrated Apache Archiva to S3 simply by copying the whole directory structure from Archiva's data folder to S3. Any maven repository should be possible to migrate the same way.

Future work

Pruning of the snapshots on release or scheduler.