Java: Repositorio Maven con Amazon S3

Si quieres montarte un repositorio Maven en Amazon S3 sin calentarte mucho la cabeza con un Nexus-OSS, aqui va el resumen (en los enlaces -ingles- los detalles completos):

Primero debes crear un par de buckets en S3, REPONAME-release y REPONAME-snapshot.
Nota: Donde REPONAME podria ser algo como por ejemplo: com-acme-maven-repo
Luego debes crear un usuario en el servicio IAM, eso te dara un Access Key ID que usaras como “username” y un Secret Access Key que usaras como “passphrase” en el settings.xml

Una vez creado el usuario debes adjuntarle una policy en la seccion de Permissions como esta:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::REPONAME-snapshot",
        "arn:aws:s3:::REPONAME-snapshot/*", 
        "arn:aws:s3:::REPONAME-release", 
        "arn:aws:s3:::REPONAME-release/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "arn:aws:s3:::REPONAME-*"
    }
  ]
}

Debes configurar las credenciales que se usaran para acceder a los buckets del S3 (~/.m2/settings.xml)

<settings>
    ...cut...
    <servers>
        ...cut...
        <server>
            <id>REPONAME-s3-release-repo</id>
            <username>0123456789ABCDEFGHIJ</username>
            <passphrase>0123456789abcdefghijklmnopqrstuvwxyzABCD</passphrase>
        </server>
        <server>
            <id>REPONAME-s3-snapshot-repo</id>
            <username>0123456789ABCDEFGHIJ</username>
            <passphrase>0123456789abcdefghijklmnopqrstuvwxyzABCD</passphrase>
        </server>
        ...cut...
    </servers>
    ...cut...
</settings>

Luego en el pom.xml de tu proyecto le indicas que repositorio debe usar para la publicacion:

<project ...cut...>
    <build>
        <extensions>
            <extension>
                <groupId>org.springframework.build</groupId>
                <artifactId>aws-maven</artifactId>
                <version>4.4.0.RELEASE</version>
            </extension>
        </extensions>
    </build>

    <!-- Deployment -->
    <distributionManagement>
        <repository>
            <name>S3 Release Repository</name>
            <id>REPONAME-s3-release-repo</id>
            <url>s3://REPONAME-release/release</url>
        </repository>
        <snapshotRepository>
            <name>S3 Snapshot Repository</name>
            <id>REPONAME-s3-snapshot-repo</id>
            <url>s3://REPONAME-snapshot/snapshot</url>
        </snapshotRepository>
    </distributionManagement>
</project>

Para hacer el deploy del artefacto… maven deploy

Para usarlo desde otros proyectos:

<project ...cut...>
    <repositories>
        <repository>
            <id>REPONAME-s3-release-repo</id>
            <url>https://REPONAME-release.s3.amazonaws.com/release/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>REPONAME-s3-snapshot-repo</id>
            <url>https://REPONAME-snapshot.s3.amazonaws.com/snapshot/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

Fuentes y detalles:
Hosting Maven repository on Amazon-S3
Giving access to a single S3 Bucket using Amazon IAM
Maven Wagon for Amazon S3

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: